Mesa (main): v3d,v3dv: stop copying and pasting the translate_swizzle helper
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Jul 13 10:33:33 UTC 2022
Module: Mesa
Branch: main
Commit: 40976356f289577afd2b63ea827eb8f3454e1475
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=40976356f289577afd2b63ea827eb8f3454e1475
Author: Iago Toral Quiroga <itoral at igalia.com>
Date: Wed Jul 13 09:24:18 2022 +0200
v3d,v3dv: stop copying and pasting the translate_swizzle helper
Reviewed-by: Alejandro Piñeiro <apinheiro at igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17509>
---
src/broadcom/common/v3d_util.c | 21 +++++++++++++++++++
src/broadcom/common/v3d_util.h | 4 ++++
src/broadcom/vulkan/v3dvx_image.c | 40 ++++++++----------------------------
src/gallium/drivers/v3d/v3dx_emit.c | 35 ++++++++-----------------------
src/gallium/drivers/v3d/v3dx_state.c | 37 ++++++++-------------------------
5 files changed, 51 insertions(+), 86 deletions(-)
diff --git a/src/broadcom/common/v3d_util.c b/src/broadcom/common/v3d_util.c
index 2eb1582712a..5fe0336f6ed 100644
--- a/src/broadcom/common/v3d_util.c
+++ b/src/broadcom/common/v3d_util.c
@@ -122,3 +122,24 @@ v3d_choose_tile_size(uint32_t color_attachment_count, uint32_t max_color_bpp,
*width = tile_sizes[idx * 2];
*height = tile_sizes[idx * 2 + 1];
}
+
+/* Translates a pipe swizzle to the swizzle values used in the
+ * TEXTURE_SHADER_STATE packet.
+ */
+uint32_t
+v3d_translate_pipe_swizzle(enum pipe_swizzle swizzle)
+{
+ switch (swizzle) {
+ case PIPE_SWIZZLE_0:
+ return 0;
+ case PIPE_SWIZZLE_1:
+ return 1;
+ case PIPE_SWIZZLE_X:
+ case PIPE_SWIZZLE_Y:
+ case PIPE_SWIZZLE_Z:
+ case PIPE_SWIZZLE_W:
+ return 2 + swizzle;
+ default:
+ unreachable("unknown swizzle");
+ }
+}
diff --git a/src/broadcom/common/v3d_util.h b/src/broadcom/common/v3d_util.h
index 3d25adc9e1a..d3cca0ce6a5 100644
--- a/src/broadcom/common/v3d_util.h
+++ b/src/broadcom/common/v3d_util.h
@@ -25,6 +25,7 @@
#define V3D_UTIL_H
#include "common/v3d_device_info.h"
+#include "pipe/p_defines.h"
uint32_t
v3d_csd_choose_workgroups_per_supergroup(struct v3d_device_info *devinfo,
@@ -39,4 +40,7 @@ v3d_choose_tile_size(uint32_t color_attachment_count, uint32_t max_color_bpp,
bool msaa, bool double_buffer,
uint32_t *width, uint32_t *height);
+uint32_t
+v3d_translate_pipe_swizzle(enum pipe_swizzle swizzle);
+
#endif
diff --git a/src/broadcom/vulkan/v3dvx_image.c b/src/broadcom/vulkan/v3dvx_image.c
index 52cd6ad914c..cbe9f3c8a75 100644
--- a/src/broadcom/vulkan/v3dvx_image.c
+++ b/src/broadcom/vulkan/v3dvx_image.c
@@ -26,30 +26,6 @@
#include "broadcom/cle/v3dx_pack.h"
#include "broadcom/compiler/v3d_compiler.h"
-/*
- * This method translates pipe_swizzle to the swizzle values used at the
- * packet TEXTURE_SHADER_STATE
- *
- * FIXME: C&P from v3d, common place?
- */
-static uint32_t
-translate_swizzle(unsigned char pipe_swizzle)
-{
- switch (pipe_swizzle) {
- case PIPE_SWIZZLE_0:
- return 0;
- case PIPE_SWIZZLE_1:
- return 1;
- case PIPE_SWIZZLE_X:
- case PIPE_SWIZZLE_Y:
- case PIPE_SWIZZLE_Z:
- case PIPE_SWIZZLE_W:
- return 2 + pipe_swizzle;
- default:
- unreachable("unknown swizzle");
- }
-}
-
/*
* Packs and ensure bo for the shader state (the latter can be temporal).
*/
@@ -93,10 +69,10 @@ pack_texture_shader_state_helper(struct v3dv_device *device,
tex.max_level = image_view->vk.base_mip_level +
image_view->vk.level_count - 1;
- tex.swizzle_r = translate_swizzle(image_view->swizzle[0]);
- tex.swizzle_g = translate_swizzle(image_view->swizzle[1]);
- tex.swizzle_b = translate_swizzle(image_view->swizzle[2]);
- tex.swizzle_a = translate_swizzle(image_view->swizzle[3]);
+ tex.swizzle_r = v3d_translate_pipe_swizzle(image_view->swizzle[0]);
+ tex.swizzle_g = v3d_translate_pipe_swizzle(image_view->swizzle[1]);
+ tex.swizzle_b = v3d_translate_pipe_swizzle(image_view->swizzle[2]);
+ tex.swizzle_a = v3d_translate_pipe_swizzle(image_view->swizzle[3]);
tex.reverse_standard_border_color = image_view->channel_reverse;
@@ -163,10 +139,10 @@ v3dX(pack_texture_shader_state_from_buffer_view)(struct v3dv_device *device,
const struct v3dv_buffer *buffer = buffer_view->buffer;
v3dvx_pack(buffer_view->texture_shader_state, TEXTURE_SHADER_STATE, tex) {
- tex.swizzle_r = translate_swizzle(PIPE_SWIZZLE_X);
- tex.swizzle_g = translate_swizzle(PIPE_SWIZZLE_Y);
- tex.swizzle_b = translate_swizzle(PIPE_SWIZZLE_Z);
- tex.swizzle_a = translate_swizzle(PIPE_SWIZZLE_W);
+ tex.swizzle_r = v3d_translate_pipe_swizzle(PIPE_SWIZZLE_X);
+ tex.swizzle_g = v3d_translate_pipe_swizzle(PIPE_SWIZZLE_Y);
+ tex.swizzle_b = v3d_translate_pipe_swizzle(PIPE_SWIZZLE_Z);
+ tex.swizzle_a = v3d_translate_pipe_swizzle(PIPE_SWIZZLE_W);
tex.image_depth = 1;
diff --git a/src/gallium/drivers/v3d/v3dx_emit.c b/src/gallium/drivers/v3d/v3dx_emit.c
index 44e755fba22..e47753d3637 100644
--- a/src/gallium/drivers/v3d/v3dx_emit.c
+++ b/src/gallium/drivers/v3d/v3dx_emit.c
@@ -26,6 +26,7 @@
#include "v3d_context.h"
#include "broadcom/common/v3d_macros.h"
#include "broadcom/cle/v3dx_pack.h"
+#include "broadcom/common/v3d_util.h"
#include "broadcom/compiler/v3d_compiler.h"
static uint8_t
@@ -110,24 +111,6 @@ swizzled_border_color(const struct v3d_device_info *devinfo,
}
}
-static uint32_t
-translate_swizzle(unsigned char pipe_swizzle)
-{
- switch (pipe_swizzle) {
- case PIPE_SWIZZLE_0:
- return 0;
- case PIPE_SWIZZLE_1:
- return 1;
- case PIPE_SWIZZLE_X:
- case PIPE_SWIZZLE_Y:
- case PIPE_SWIZZLE_Z:
- case PIPE_SWIZZLE_W:
- return 2 + pipe_swizzle;
- default:
- unreachable("unknown swizzle");
- }
-}
-
static void
emit_one_texture(struct v3d_context *v3d, struct v3d_texture_stateobj *stage_tex,
int i)
@@ -195,15 +178,15 @@ emit_one_texture(struct v3d_context *v3d, struct v3d_texture_stateobj *stage_tex
* the shader, because you need the Y/Z/W channels to be defined.
*/
if (return_size == 32) {
- unpacked.swizzle_r = translate_swizzle(PIPE_SWIZZLE_X);
- unpacked.swizzle_g = translate_swizzle(PIPE_SWIZZLE_Y);
- unpacked.swizzle_b = translate_swizzle(PIPE_SWIZZLE_Z);
- unpacked.swizzle_a = translate_swizzle(PIPE_SWIZZLE_W);
+ unpacked.swizzle_r = v3d_translate_pipe_swizzle(PIPE_SWIZZLE_X);
+ unpacked.swizzle_g = v3d_translate_pipe_swizzle(PIPE_SWIZZLE_Y);
+ unpacked.swizzle_b = v3d_translate_pipe_swizzle(PIPE_SWIZZLE_Z);
+ unpacked.swizzle_a = v3d_translate_pipe_swizzle(PIPE_SWIZZLE_W);
} else {
- unpacked.swizzle_r = translate_swizzle(sview->swizzle[0]);
- unpacked.swizzle_g = translate_swizzle(sview->swizzle[1]);
- unpacked.swizzle_b = translate_swizzle(sview->swizzle[2]);
- unpacked.swizzle_a = translate_swizzle(sview->swizzle[3]);
+ unpacked.swizzle_r = v3d_translate_pipe_swizzle(sview->swizzle[0]);
+ unpacked.swizzle_g = v3d_translate_pipe_swizzle(sview->swizzle[1]);
+ unpacked.swizzle_b = v3d_translate_pipe_swizzle(sview->swizzle[2]);
+ unpacked.swizzle_a = v3d_translate_pipe_swizzle(sview->swizzle[3]);
}
int min_img_filter = psampler->min_img_filter;
diff --git a/src/gallium/drivers/v3d/v3dx_state.c b/src/gallium/drivers/v3d/v3dx_state.c
index ce293218447..b4d1a53f75f 100644
--- a/src/gallium/drivers/v3d/v3dx_state.c
+++ b/src/gallium/drivers/v3d/v3dx_state.c
@@ -35,6 +35,7 @@
#include "v3d_context.h"
#include "broadcom/common/v3d_tiling.h"
#include "broadcom/common/v3d_macros.h"
+#include "broadcom/common/v3d_util.h"
#include "broadcom/compiler/v3d_compiler.h"
#include "broadcom/cle/v3dx_pack.h"
@@ -836,26 +837,6 @@ v3d_sampler_state_delete(struct pipe_context *pctx,
free(psampler);
}
-#if V3D_VERSION >= 40
-static uint32_t
-translate_swizzle(unsigned char pipe_swizzle)
-{
- switch (pipe_swizzle) {
- case PIPE_SWIZZLE_0:
- return 0;
- case PIPE_SWIZZLE_1:
- return 1;
- case PIPE_SWIZZLE_X:
- case PIPE_SWIZZLE_Y:
- case PIPE_SWIZZLE_Z:
- case PIPE_SWIZZLE_W:
- return 2 + pipe_swizzle;
- default:
- unreachable("unknown swizzle");
- }
-}
-#endif
-
static void
v3d_setup_texture_shader_state_from_buffer(struct V3DX(TEXTURE_SHADER_STATE) *tex,
struct pipe_resource *prsc,
@@ -991,10 +972,10 @@ v3dX(create_texture_shader_state_bo)(struct v3d_context *v3d,
tex.srgb = util_format_is_srgb(cso->format);
#if V3D_VERSION >= 40
- tex.swizzle_r = translate_swizzle(so->swizzle[0]);
- tex.swizzle_g = translate_swizzle(so->swizzle[1]);
- tex.swizzle_b = translate_swizzle(so->swizzle[2]);
- tex.swizzle_a = translate_swizzle(so->swizzle[3]);
+ tex.swizzle_r = v3d_translate_pipe_swizzle(so->swizzle[0]);
+ tex.swizzle_g = v3d_translate_pipe_swizzle(so->swizzle[1]);
+ tex.swizzle_b = v3d_translate_pipe_swizzle(so->swizzle[2]);
+ tex.swizzle_a = v3d_translate_pipe_swizzle(so->swizzle[3]);
#endif
if (prsc->nr_samples > 1 && V3D_VERSION < 40) {
@@ -1413,10 +1394,10 @@ v3d_create_image_view_texture_shader_state(struct v3d_context *v3d,
iview->base.u.buf.size);
}
- tex.swizzle_r = translate_swizzle(PIPE_SWIZZLE_X);
- tex.swizzle_g = translate_swizzle(PIPE_SWIZZLE_Y);
- tex.swizzle_b = translate_swizzle(PIPE_SWIZZLE_Z);
- tex.swizzle_a = translate_swizzle(PIPE_SWIZZLE_W);
+ tex.swizzle_r = v3d_translate_pipe_swizzle(PIPE_SWIZZLE_X);
+ tex.swizzle_g = v3d_translate_pipe_swizzle(PIPE_SWIZZLE_Y);
+ tex.swizzle_b = v3d_translate_pipe_swizzle(PIPE_SWIZZLE_Z);
+ tex.swizzle_a = v3d_translate_pipe_swizzle(PIPE_SWIZZLE_W);
tex.texture_type = v3d_get_tex_format(&v3d->screen->devinfo,
iview->base.format);
More information about the mesa-commit
mailing list