Mesa (master): panfrost: Calculate varying size by format
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri Jun 12 14:59:53 UTC 2020
Module: Mesa
Branch: master
Commit: 24c3b95925389ed355213fcb12acc9baa088aa87
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=24c3b95925389ed355213fcb12acc9baa088aa87
Author: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>
Date: Wed Jun 10 15:35:41 2020 -0400
panfrost: Calculate varying size by format
Will enable <16-byte varyings.
Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5423>
---
src/gallium/drivers/panfrost/pan_cmdstream.c | 26 ++++++++++++++++++++++++++
src/panfrost/include/panfrost-job.h | 2 ++
2 files changed, 28 insertions(+)
diff --git a/src/gallium/drivers/panfrost/pan_cmdstream.c b/src/gallium/drivers/panfrost/pan_cmdstream.c
index 1533494c7f0..5c0d7f4d0e9 100644
--- a/src/gallium/drivers/panfrost/pan_cmdstream.c
+++ b/src/gallium/drivers/panfrost/pan_cmdstream.c
@@ -1721,6 +1721,32 @@ pan_get_so(struct pipe_stream_output_info *info, gl_varying_slot loc)
unreachable("Varying not captured");
}
+static unsigned
+pan_varying_size(enum mali_format fmt)
+{
+ unsigned type = MALI_EXTRACT_TYPE(fmt);
+ unsigned chan = MALI_EXTRACT_CHANNELS(fmt);
+ unsigned bits = MALI_EXTRACT_BITS(fmt);
+ unsigned bpc = 0;
+
+ if (bits == MALI_CHANNEL_FLOAT) {
+ /* No doubles */
+ bool fp16 = (type == MALI_FORMAT_SINT);
+ assert(fp16 || (type == MALI_FORMAT_UNORM));
+
+ bpc = fp16 ? 2 : 4;
+ } else {
+ assert(type >= MALI_FORMAT_SNORM && type <= MALI_FORMAT_SINT);
+
+ /* See the enums */
+ bits = 1 << bits;
+ assert(bits >= 8);
+ bpc = bits / 8;
+ }
+
+ return bpc * chan;
+}
+
void
panfrost_emit_varying_descriptor(struct panfrost_batch *batch,
unsigned vertex_count,
diff --git a/src/panfrost/include/panfrost-job.h b/src/panfrost/include/panfrost-job.h
index 0829b9bfb57..d6f1fc861da 100644
--- a/src/panfrost/include/panfrost-job.h
+++ b/src/panfrost/include/panfrost-job.h
@@ -251,6 +251,7 @@ struct mali_channel_swizzle {
* for Bifrost framebuffer output.
*/
#define MALI_FORMAT_SPECIAL2 (7 << 5)
+#define MALI_EXTRACT_TYPE(fmt) ((fmt) & 0xe0)
/* If the high 3 bits are 3 to 6 these two bits say how many components
* there are.
@@ -274,6 +275,7 @@ struct mali_channel_swizzle {
* MALI_FORMAT_UNORM, it means a 32-bit float.
*/
#define MALI_CHANNEL_FLOAT 7
+#define MALI_EXTRACT_BITS(fmt) (fmt & 0x7)
enum mali_format {
MALI_ETC2_RGB8 = MALI_FORMAT_COMPRESSED | 0x1,
More information about the mesa-commit
mailing list