From 24c3b95925389ed355213fcb12acc9baa088aa87 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Wed, 10 Jun 2020 15:35:41 -0400 Subject: [PATCH] panfrost: Calculate varying size by format Will enable <16-byte varyings. Signed-off-by: Alyssa Rosenzweig Part-of: --- 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, -- 2.30.2