mirror of
https://gitlab.freedesktop.org/wayland/weston.git
synced 2026-05-07 04:58:16 +02:00
clients/simple-dmabuf-feedback: Add fallback print method for unknown formats
Using `pixel_format_get_info()` can result in formats being
reported as `UNKNOWN` when used on compositors other than Weston.
As `weston-simple-dmabuf-feedback` somewhat succeeds `wayland-info`
as tool for `zwp_linux_dmabuf_v1` debugging from version 4 on, copy
the approach from the later for these cases.
Signed-off-by: Robert Mader <robert.mader@collabora.com>
(cherry picked from commit 2669853562)
This commit is contained in:
parent
f5d5114d9d
commit
7b390f1dae
1 changed files with 39 additions and 2 deletions
|
|
@ -26,6 +26,7 @@
|
|||
#include "config.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <ctype.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
|
|
@ -1070,18 +1071,54 @@ dmabuf_feedback_tranche_formats(void *data,
|
|||
}
|
||||
}
|
||||
|
||||
static char
|
||||
bits2graph(uint32_t value, unsigned bitoffset)
|
||||
{
|
||||
int c = (value >> bitoffset) & 0xff;
|
||||
|
||||
if (isgraph(c) || isspace(c))
|
||||
return c;
|
||||
|
||||
return '?';
|
||||
}
|
||||
|
||||
static void
|
||||
fourcc2str(uint32_t format, char *str, int len)
|
||||
{
|
||||
int i;
|
||||
|
||||
assert(len >= 5);
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
str[i] = bits2graph(format, i * 8);
|
||||
str[i] = '\0';
|
||||
}
|
||||
|
||||
static void
|
||||
print_tranche_format_modifier(uint32_t format, uint64_t modifier)
|
||||
{
|
||||
const struct pixel_format_info *fmt_info;
|
||||
char *format_str;
|
||||
char *mod_name;
|
||||
int len;
|
||||
|
||||
fmt_info = pixel_format_get_info(format);
|
||||
mod_name = pixel_format_get_modifier(modifier);
|
||||
fmt_info = pixel_format_get_info(format);
|
||||
|
||||
if (fmt_info) {
|
||||
len = asprintf(&format_str, "%s", fmt_info->drm_format_name);
|
||||
} else {
|
||||
char fourcc_str[5];
|
||||
|
||||
fourcc2str(format, fourcc_str, sizeof(fourcc_str));
|
||||
len = asprintf(&format_str, "0x%08x (%s)", format, fourcc_str);
|
||||
}
|
||||
assert(len > 0);
|
||||
|
||||
fprintf(stderr, "│ ├────────tranche format/modifier pair - format %s, modifier %s\n",
|
||||
fmt_info ? fmt_info->drm_format_name : "UNKNOWN", mod_name);
|
||||
format_str, mod_name);
|
||||
|
||||
free(format_str);
|
||||
free(mod_name);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue