mirror of
				https://gitlab.freedesktop.org/wlroots/wlroots.git
				synced 2025-11-03 09:01:40 -05:00 
			
		
		
		
	Add union function for format sets
This commit is contained in:
		
							parent
							
								
									bf8ae8a036
								
							
						
					
					
						commit
						ec37d55a5e
					
				
					 2 changed files with 48 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -240,3 +240,43 @@ bool wlr_drm_format_set_intersect(struct wlr_drm_format_set *dst,
 | 
			
		|||
	*dst = out;
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static bool drm_format_set_extend(struct wlr_drm_format_set *dst,
 | 
			
		||||
		const struct wlr_drm_format_set *src) {
 | 
			
		||||
	for (size_t i = 0; i < src->len; i++) {
 | 
			
		||||
		struct wlr_drm_format *format = src->formats[i];
 | 
			
		||||
		for (size_t j = 0; j < format->len; j++) {
 | 
			
		||||
			if (!wlr_drm_format_set_add(dst, format->format, format->modifiers[j])) {
 | 
			
		||||
				wlr_log_errno(WLR_ERROR, "Adding format/modifier to set failed");
 | 
			
		||||
				return false;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wlr_drm_format_set_union(struct wlr_drm_format_set *dst,
 | 
			
		||||
		const struct wlr_drm_format_set *a, const struct wlr_drm_format_set *b) {
 | 
			
		||||
	assert(dst != a && dst != b);
 | 
			
		||||
 | 
			
		||||
	struct wlr_drm_format_set out = {0};
 | 
			
		||||
	out.capacity = a->len + b->len;
 | 
			
		||||
	out.formats = calloc(out.capacity, sizeof(struct wlr_drm_format *));
 | 
			
		||||
	if (out.formats == NULL) {
 | 
			
		||||
		wlr_log_errno(WLR_ERROR, "Allocation failed");
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Add both a and b sets into out
 | 
			
		||||
	if (!drm_format_set_extend(&out, a)) {
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
	if (!drm_format_set_extend(&out, b)) {
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	*dst = out;
 | 
			
		||||
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue