summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@linux.intel.com>2019-04-18 19:40:27 +0300
committerVille Syrjälä <ville.syrjala@linux.intel.com>2019-04-29 14:55:39 +0300
commit6e6f7c00fd860cc61e28e47286118e590f2a4563 (patch)
tree0428c9ac8e11ff8bf296513de94ce133e4bdac38
parent9f49df1ad3ba49d479aa9a1ff997d2236509163b (diff)
lib/rendercopy: Add fp16 support for gen4+
Allow copying between fp16 surfaces. We'll use the FLOAT surface format since that's all the display supports currently. Hopefully the hardware gives us a 1:1 copy, at least if the input doesn't contain crazy infs/nans etc. We could choose UNORM instead but that won't work for eventually exposing fp16+ccs. Although we do need to replace the simple bpp value with a more specific format type to get 10bpc+ccs working as well. Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r--lib/rendercopy_gen4.c1
-rw-r--r--lib/rendercopy_gen6.c1
-rw-r--r--lib/rendercopy_gen7.c1
-rw-r--r--lib/rendercopy_gen8.c1
-rw-r--r--lib/rendercopy_gen9.c1
5 files changed, 5 insertions, 0 deletions
diff --git a/lib/rendercopy_gen4.c b/lib/rendercopy_gen4.c
index 9111508f..42de77f9 100644
--- a/lib/rendercopy_gen4.c
+++ b/lib/rendercopy_gen4.c
@@ -160,6 +160,7 @@ gen4_bind_buf(struct intel_batchbuffer *batch,
case 8: ss->ss0.surface_format = SURFACEFORMAT_R8_UNORM; break;
case 16: ss->ss0.surface_format = SURFACEFORMAT_R8G8_UNORM; break;
case 32: ss->ss0.surface_format = SURFACEFORMAT_B8G8R8A8_UNORM; break;
+ case 64: ss->ss0.surface_format = SURFACEFORMAT_R16G16B16A16_FLOAT; break;
default: igt_assert(0);
}
diff --git a/lib/rendercopy_gen6.c b/lib/rendercopy_gen6.c
index a6157cfc..b90466d0 100644
--- a/lib/rendercopy_gen6.c
+++ b/lib/rendercopy_gen6.c
@@ -97,6 +97,7 @@ gen6_bind_buf(struct intel_batchbuffer *batch, const struct igt_buf *buf,
case 8: ss->ss0.surface_format = SURFACEFORMAT_R8_UNORM; break;
case 16: ss->ss0.surface_format = SURFACEFORMAT_R8G8_UNORM; break;
case 32: ss->ss0.surface_format = SURFACEFORMAT_B8G8R8A8_UNORM; break;
+ case 64: ss->ss0.surface_format = SURFACEFORMAT_R16G16B16A16_FLOAT; break;
default: igt_assert(0);
}
diff --git a/lib/rendercopy_gen7.c b/lib/rendercopy_gen7.c
index 0a5d4a15..94946842 100644
--- a/lib/rendercopy_gen7.c
+++ b/lib/rendercopy_gen7.c
@@ -73,6 +73,7 @@ gen7_bind_buf(struct intel_batchbuffer *batch,
case 8: format = SURFACEFORMAT_R8_UNORM; break;
case 16: format = SURFACEFORMAT_R8G8_UNORM; break;
case 32: format = SURFACEFORMAT_B8G8R8A8_UNORM; break;
+ case 64: format = SURFACEFORMAT_R16G16B16A16_FLOAT; break;
default: igt_assert(0);
}
diff --git a/lib/rendercopy_gen8.c b/lib/rendercopy_gen8.c
index 643b6630..f7a33947 100644
--- a/lib/rendercopy_gen8.c
+++ b/lib/rendercopy_gen8.c
@@ -170,6 +170,7 @@ gen8_bind_buf(struct intel_batchbuffer *batch,
case 8: ss->ss0.surface_format = SURFACEFORMAT_R8_UNORM; break;
case 16: ss->ss0.surface_format = SURFACEFORMAT_R8G8_UNORM; break;
case 32: ss->ss0.surface_format = SURFACEFORMAT_B8G8R8A8_UNORM; break;
+ case 64: ss->ss0.surface_format = SURFACEFORMAT_R16G16B16A16_FLOAT; break;
default: igt_assert(0);
}
ss->ss0.render_cache_read_write = 1;
diff --git a/lib/rendercopy_gen9.c b/lib/rendercopy_gen9.c
index 93e9d150..5c6485d7 100644
--- a/lib/rendercopy_gen9.c
+++ b/lib/rendercopy_gen9.c
@@ -201,6 +201,7 @@ gen8_bind_buf(struct intel_batchbuffer *batch, const struct igt_buf *buf,
case 8: ss->ss0.surface_format = SURFACEFORMAT_R8_UNORM; break;
case 16: ss->ss0.surface_format = SURFACEFORMAT_R8G8_UNORM; break;
case 32: ss->ss0.surface_format = SURFACEFORMAT_B8G8R8A8_UNORM; break;
+ case 64: ss->ss0.surface_format = SURFACEFORMAT_R16G16B16A16_FLOAT; break;
default: igt_assert(0);
}
ss->ss0.render_cache_read_write = 1;