glamor: Fallback to system memory for RW PBO buffer allocation
We currently support two modes of operation for RW PBO buffers: one that allocates a pack buffer with GL memory and one that uses system memory when the former is not supported. Since allocation with system memory is less likely to fail, add a fallback to system memory when GL memory failed instead of bailing out. Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
This commit is contained in:
		
							parent
							
								
									de6b3fac1f
								
							
						
					
					
						commit
						8c4e8d9eff
					
				|  | @ -107,9 +107,10 @@ glamor_prep_pixmap_box(PixmapPtr pixmap, glamor_access_t access, BoxPtr box) | ||||||
|                 glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); |                 glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); | ||||||
|                 glDeleteBuffers(1, &priv->pbo); |                 glDeleteBuffers(1, &priv->pbo); | ||||||
|                 priv->pbo = 0; |                 priv->pbo = 0; | ||||||
|                 return FALSE; |  | ||||||
|             } |             } | ||||||
|         } else { |         } | ||||||
|  | 
 | ||||||
|  |         if (!priv->pbo) { | ||||||
|             pixmap->devPrivate.ptr = xallocarray(pixmap->devKind, |             pixmap->devPrivate.ptr = xallocarray(pixmap->devKind, | ||||||
|                                                  pixmap->drawable.height); |                                                  pixmap->drawable.height); | ||||||
|             if (!pixmap->devPrivate.ptr) |             if (!pixmap->devPrivate.ptr) | ||||||
|  | @ -123,7 +124,7 @@ glamor_prep_pixmap_box(PixmapPtr pixmap, glamor_access_t access, BoxPtr box) | ||||||
| 
 | 
 | ||||||
|     RegionUninit(®ion); |     RegionUninit(®ion); | ||||||
| 
 | 
 | ||||||
|     if (glamor_priv->has_rw_pbo) { |     if (priv->pbo) { | ||||||
|         if (priv->map_access == GLAMOR_ACCESS_RW) |         if (priv->map_access == GLAMOR_ACCESS_RW) | ||||||
|             gl_access = GL_READ_WRITE; |             gl_access = GL_READ_WRITE; | ||||||
|         else |         else | ||||||
|  | @ -155,7 +156,7 @@ glamor_fini_pixmap(PixmapPtr pixmap) | ||||||
|     if (!priv->prepared) |     if (!priv->prepared) | ||||||
|         return; |         return; | ||||||
| 
 | 
 | ||||||
|     if (glamor_priv->has_rw_pbo) { |     if (priv->pbo) { | ||||||
|         glBindBuffer(GL_PIXEL_UNPACK_BUFFER, priv->pbo); |         glBindBuffer(GL_PIXEL_UNPACK_BUFFER, priv->pbo); | ||||||
|         glUnmapBuffer(GL_PIXEL_UNPACK_BUFFER); |         glUnmapBuffer(GL_PIXEL_UNPACK_BUFFER); | ||||||
|         pixmap->devPrivate.ptr = NULL; |         pixmap->devPrivate.ptr = NULL; | ||||||
|  | @ -170,7 +171,7 @@ glamor_fini_pixmap(PixmapPtr pixmap) | ||||||
| 
 | 
 | ||||||
|     RegionUninit(&priv->prepare_region); |     RegionUninit(&priv->prepare_region); | ||||||
| 
 | 
 | ||||||
|     if (glamor_priv->has_rw_pbo) { |     if (priv->pbo) { | ||||||
|         glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); |         glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); | ||||||
|         glDeleteBuffers(1, &priv->pbo); |         glDeleteBuffers(1, &priv->pbo); | ||||||
|         priv->pbo = 0; |         priv->pbo = 0; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue