glamor: return the result of gbm_format_for_depth
This way the caller knows if the conversion failed. While at it, check for width/height at the same time. Signed-off-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1764>
This commit is contained in:
		
							parent
							
								
									080fb49eff
								
							
						
					
					
						commit
						87afcc7699
					
				|  | @ -520,6 +520,31 @@ glamor_egl_fd_name_from_pixmap(ScreenPtr screen, | |||
|     return fd; | ||||
| } | ||||
| 
 | ||||
| static bool | ||||
| gbm_format_for_depth(CARD8 depth, uint32_t *format) | ||||
| { | ||||
|     switch (depth) { | ||||
|     case 15: | ||||
|         *format = GBM_FORMAT_ARGB1555; | ||||
|         return true; | ||||
|     case 16: | ||||
|         *format = GBM_FORMAT_RGB565; | ||||
|         return true; | ||||
|     case 24: | ||||
|         *format = GBM_FORMAT_XRGB8888; | ||||
|         return true; | ||||
|     case 30: | ||||
|         *format = GBM_FORMAT_ARGB2101010; | ||||
|         return true; | ||||
|     case 32: | ||||
|         *format = GBM_FORMAT_ARGB8888; | ||||
|         return true; | ||||
|     default: | ||||
|         ErrorF("unexpected depth: %d\n", depth); | ||||
|         return false; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| Bool | ||||
| glamor_back_pixmap_from_fd(PixmapPtr pixmap, | ||||
|                            int fd, | ||||
|  | @ -558,25 +583,6 @@ glamor_back_pixmap_from_fd(PixmapPtr pixmap, | |||
|     return ret; | ||||
| } | ||||
| 
 | ||||
| static uint32_t | ||||
| gbm_format_for_depth(CARD8 depth) | ||||
| { | ||||
|     switch (depth) { | ||||
|     case 15: | ||||
|         return GBM_FORMAT_ARGB1555; | ||||
|     case 16: | ||||
|         return GBM_FORMAT_RGB565; | ||||
|     case 24: | ||||
|         return GBM_FORMAT_XRGB8888; | ||||
|     case 30: | ||||
|         return GBM_FORMAT_ARGB2101010; | ||||
|     default: | ||||
|         ErrorF("unexpected depth: %d\n", depth); | ||||
|     case 32: | ||||
|         return GBM_FORMAT_ARGB8888; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| PixmapPtr | ||||
| glamor_pixmap_from_fds(ScreenPtr screen, | ||||
|                        CARD8 num_fds, const int *fds, | ||||
|  | @ -599,6 +605,10 @@ glamor_pixmap_from_fds(ScreenPtr screen, | |||
|         struct gbm_import_fd_modifier_data import_data = { 0 }; | ||||
|         struct gbm_bo *bo; | ||||
| 
 | ||||
|         if (!gbm_format_for_depth(depth, &import_data.format) || | ||||
|             width == 0 || height == 0) | ||||
|             goto error; | ||||
| 
 | ||||
|         import_data.width = width; | ||||
|         import_data.height = height; | ||||
|         import_data.num_fds = num_fds; | ||||
|  | @ -608,7 +618,6 @@ glamor_pixmap_from_fds(ScreenPtr screen, | |||
|             import_data.strides[i] = strides[i]; | ||||
|             import_data.offsets[i] = offsets[i]; | ||||
|         } | ||||
|         import_data.format = gbm_format_for_depth(depth); | ||||
|         bo = gbm_bo_import(glamor_egl->gbm, GBM_BO_IMPORT_FD_MODIFIER, &import_data, 0); | ||||
|         if (bo) { | ||||
|             screen->ModifyPixmapHeader(pixmap, width, height, 0, 0, strides[0], NULL); | ||||
|  | @ -624,6 +633,7 @@ glamor_pixmap_from_fds(ScreenPtr screen, | |||
|         } | ||||
|     } | ||||
| 
 | ||||
| error: | ||||
|     if (ret == FALSE) { | ||||
|         screen->DestroyPixmap(pixmap); | ||||
|         return NULL; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue