Bladeren bron

pb_bufmgr_cache: add is_buffer_busy hook and use it instead of non-blocking map

This is cleaner and implementing the hook is optional.
tags/android-x86-2.2-r2
Marek Olšák 14 jaren geleden
bovenliggende
commit
49579a4df8
2 gewijzigde bestanden met toevoegingen van 14 en 7 verwijderingen
  1. 4
    0
      src/gallium/auxiliary/pipebuffer/pb_bufmgr.h
  2. 10
    7
      src/gallium/auxiliary/pipebuffer/pb_bufmgr_cache.c

+ 4
- 0
src/gallium/auxiliary/pipebuffer/pb_bufmgr.h Bestand weergeven

@@ -82,6 +82,10 @@ struct pb_manager
*/
void
(*flush)( struct pb_manager *mgr );

boolean
(*is_buffer_busy)( struct pb_manager *mgr,
struct pb_buffer *buf );
};



+ 10
- 7
src/gallium/auxiliary/pipebuffer/pb_bufmgr_cache.c Bestand weergeven

@@ -227,8 +227,6 @@ pb_cache_is_buffer_compat(struct pb_cache_buffer *buf,
pb_size size,
const struct pb_desc *desc)
{
void *map;

if(buf->base.base.size < size)
return 0;

@@ -242,13 +240,18 @@ pb_cache_is_buffer_compat(struct pb_cache_buffer *buf,
if(!pb_check_usage(desc->usage, buf->base.base.usage))
return 0;

map = pb_map(buf->buffer, PB_USAGE_DONTBLOCK, NULL);
if (!map) {
return -1;
if (buf->mgr->provider->is_buffer_busy) {
if (buf->mgr->provider->is_buffer_busy(buf->mgr->provider, buf->buffer))
return -1;
} else {
void *ptr = pb_map(buf->buffer, PB_USAGE_DONTBLOCK, NULL);

if (!ptr)
return -1;

pb_unmap(buf->buffer);
}

pb_unmap(buf->buffer);
return 1;
}


Laden…
Annuleren
Opslaan