v3d,v3dv: stop copying and pasting the translate_swizzle helper

Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17509>
This commit is contained in:
Iago Toral Quiroga 2022-07-13 09:24:18 +02:00 committed by Marge Bot
parent 8d8491df5e
commit 40976356f2
5 changed files with 51 additions and 86 deletions

View File

@ -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");
}
}

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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);