summaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
authorMaarten Lankhorst <maarten.lankhorst@linux.intel.com>2018-12-03 15:13:40 +0100
committerBryce Harrington <bryce@bryceharrington.org>2019-01-07 19:10:44 -0800
commita34cb719cd9cb4f0c5b78be80b80ab0ae22464a6 (patch)
treea74b88eacb6800be9cb055f2b7bc56d667654071 /util
parent87c1c19197a6a3cdae955b320386f5449e17b286 (diff)
Add support for RGBA128F and RGB96F formats.
IGT wants to add support for planes with a bit depth >10, which requires a higher precision format than we have currently. I'm using RGBA as format, because of its existence in OpenGL. With the new formats we can directly convert our bytes to half float, or multiply a colro vector with a matrix to go to the Y'CbCr colorspace. This requires pixman 0.36.0, so bump the version requirement. Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Reviewed-by: Bryce Harrington <bryce@bryceharrington.org>
Diffstat (limited to 'util')
-rw-r--r--util/cairo-script/cairo-script-operators.c12
-rw-r--r--util/cairo-trace/trace.c12
2 files changed, 23 insertions, 1 deletions
diff --git a/util/cairo-script/cairo-script-operators.c b/util/cairo-script/cairo-script-operators.c
index e493311e7..7cdb5afb6 100644
--- a/util/cairo-script/cairo-script-operators.c
+++ b/util/cairo-script/cairo-script-operators.c
@@ -2967,6 +2967,12 @@ _image_read_raw (csi_t *ctx,
case CAIRO_FORMAT_ARGB32:
instride = rowlen = 4 * width;
break;
+ case CAIRO_FORMAT_RGB96F:
+ instride = rowlen = 12 * width;
+ break;
+ case CAIRO_FORMAT_RGBA128F:
+ instride = rowlen = 16 * width;
+ break;
}
len = rowlen * height;
@@ -3066,6 +3072,8 @@ err_decompress:
#endif
}
break;
+ case CAIRO_FORMAT_RGB96F:
+ case CAIRO_FORMAT_RGBA128F:
case CAIRO_FORMAT_RGB30:
case CAIRO_FORMAT_INVALID:
case CAIRO_FORMAT_ARGB32:
@@ -3155,6 +3163,8 @@ err_decompress:
#endif
}
break;
+ case CAIRO_FORMAT_RGBA128F:
+ case CAIRO_FORMAT_RGB96F:
case CAIRO_FORMAT_RGB30:
case CAIRO_FORMAT_INVALID:
case CAIRO_FORMAT_ARGB32:
@@ -3191,6 +3201,8 @@ err_decompress:
case CAIRO_FORMAT_A8:
break;
+ case CAIRO_FORMAT_RGBA128F:
+ case CAIRO_FORMAT_RGB96F:
case CAIRO_FORMAT_RGB30:
case CAIRO_FORMAT_RGB24:
case CAIRO_FORMAT_INVALID:
diff --git a/util/cairo-trace/trace.c b/util/cairo-trace/trace.c
index 7ce903b11..28ec11941 100644
--- a/util/cairo-trace/trace.c
+++ b/util/cairo-trace/trace.c
@@ -1510,6 +1510,8 @@ _format_to_string (cairo_format_t format)
#define f(name) case CAIRO_FORMAT_ ## name: return #name
switch (format) {
f(INVALID);
+ f(RGBA128F);
+ f(RGB96F);
f(ARGB32);
f(RGB30);
f(RGB24);
@@ -1527,8 +1529,10 @@ _format_to_content_string (cairo_format_t format)
switch (format) {
case CAIRO_FORMAT_INVALID:
return "INVALID";
+ case CAIRO_FORMAT_RGBA128F:
case CAIRO_FORMAT_ARGB32:
return "COLOR_ALPHA";
+ case CAIRO_FORMAT_RGB96F:
case CAIRO_FORMAT_RGB30:
case CAIRO_FORMAT_RGB24:
case CAIRO_FORMAT_RGB16_565:
@@ -1673,6 +1677,8 @@ _emit_image (cairo_surface_t *image,
case CAIRO_FORMAT_RGB30:
case CAIRO_FORMAT_INVALID:
case CAIRO_FORMAT_ARGB32: len = 4*width; break;
+ case CAIRO_FORMAT_RGB96F: len = 12*width; break;
+ case CAIRO_FORMAT_RGBA128F: len = 16*width; break;
}
_trace_printf (" /source ");
@@ -1696,6 +1702,8 @@ _emit_image (cairo_surface_t *image,
case CAIRO_FORMAT_RGB16_565:
case CAIRO_FORMAT_RGB30:
case CAIRO_FORMAT_ARGB32:
+ case CAIRO_FORMAT_RGB96F:
+ case CAIRO_FORMAT_RGBA128F:
for (row = height; row--; ) {
_write_data (&stream, data, len);
data += stride;
@@ -1754,6 +1762,8 @@ _emit_image (cairo_surface_t *image,
data += stride;
}
break;
+ case CAIRO_FORMAT_RGB96F:
+ case CAIRO_FORMAT_RGBA128F:
case CAIRO_FORMAT_RGB30:
case CAIRO_FORMAT_ARGB32:
for (row = height; row--; ) {
@@ -1766,7 +1776,7 @@ _emit_image (cairo_surface_t *image,
data += stride;
}
break;
- case CAIRO_FORMAT_INVALID:
+ case CAIRO_FORMAT_INVALID:
default:
break;
}