mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 19:30:11 +01:00
panfrost: Simplify filter_mode definition
It's just a bit field containing some flags; there's no need for all the macro magic. Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
This commit is contained in:
parent
160795429d
commit
cf6cad3922
3 changed files with 28 additions and 41 deletions
|
|
@ -314,27 +314,6 @@ translate_tex_wrap(enum pipe_tex_wrap w)
|
|||
}
|
||||
}
|
||||
|
||||
static unsigned
|
||||
translate_tex_filter(enum pipe_tex_filter f)
|
||||
{
|
||||
switch (f) {
|
||||
case PIPE_TEX_FILTER_NEAREST:
|
||||
return MALI_NEAREST;
|
||||
|
||||
case PIPE_TEX_FILTER_LINEAR:
|
||||
return MALI_LINEAR;
|
||||
|
||||
default:
|
||||
unreachable("Invalid filter");
|
||||
}
|
||||
}
|
||||
|
||||
static unsigned
|
||||
translate_mip_filter(enum pipe_tex_mipfilter f)
|
||||
{
|
||||
return (f == PIPE_TEX_MIPFILTER_LINEAR) ? MALI_MIP_LINEAR : 0;
|
||||
}
|
||||
|
||||
static unsigned
|
||||
panfrost_translate_compare_func(enum pipe_compare_func in)
|
||||
{
|
||||
|
|
@ -1959,10 +1938,17 @@ panfrost_create_sampler_state(
|
|||
|
||||
/* sampler_state corresponds to mali_sampler_descriptor, which we can generate entirely here */
|
||||
|
||||
bool min_nearest = cso->min_img_filter == PIPE_TEX_FILTER_NEAREST;
|
||||
bool mag_nearest = cso->mag_img_filter == PIPE_TEX_FILTER_NEAREST;
|
||||
bool mip_linear = cso->min_mip_filter == PIPE_TEX_MIPFILTER_LINEAR;
|
||||
|
||||
unsigned min_filter = min_nearest ? MALI_SAMP_MIN_NEAREST : 0;
|
||||
unsigned mag_filter = mag_nearest ? MALI_SAMP_MAG_NEAREST : 0;
|
||||
unsigned mip_filter = mip_linear ?
|
||||
(MALI_SAMP_MIP_LINEAR_1 | MALI_SAMP_MIP_LINEAR_2) : 0;
|
||||
|
||||
struct mali_sampler_descriptor sampler_descriptor = {
|
||||
.filter_mode = MALI_TEX_MIN(translate_tex_filter(cso->min_img_filter))
|
||||
| MALI_TEX_MAG(translate_tex_filter(cso->mag_img_filter))
|
||||
| translate_mip_filter(cso->min_mip_filter)
|
||||
.filter_mode = min_filter | mag_filter | mip_filter
|
||||
| 0x20,
|
||||
|
||||
.wrap_s = translate_tex_wrap(cso->wrap_s),
|
||||
|
|
|
|||
|
|
@ -1188,21 +1188,15 @@ struct mali_texture_descriptor {
|
|||
mali_ptr payload[MAX_MIP_LEVELS * MAX_CUBE_FACES * MAX_ELEMENTS];
|
||||
} __attribute__((packed));
|
||||
|
||||
/* Used as part of filter_mode */
|
||||
/* filter_mode */
|
||||
|
||||
#define MALI_LINEAR 0
|
||||
#define MALI_NEAREST 1
|
||||
#define MALI_MIP_LINEAR (0x18)
|
||||
#define MALI_SAMP_MAG_NEAREST (1 << 0)
|
||||
#define MALI_SAMP_MIN_NEAREST (1 << 1)
|
||||
|
||||
/* Used to construct low bits of filter_mode */
|
||||
/* TODO: What do these bits mean individually? Only seen set together */
|
||||
|
||||
#define MALI_TEX_MAG(mode) (((mode) & 1) << 0)
|
||||
#define MALI_TEX_MIN(mode) (((mode) & 1) << 1)
|
||||
|
||||
#define MALI_TEX_MAG_MASK (1)
|
||||
#define MALI_TEX_MIN_MASK (2)
|
||||
|
||||
#define MALI_FILTER_NAME(filter) (filter ? "MALI_NEAREST" : "MALI_LINEAR")
|
||||
#define MALI_SAMP_MIP_LINEAR_1 (1 << 3)
|
||||
#define MALI_SAMP_MIP_LINEAR_2 (1 << 4)
|
||||
|
||||
/* Used for lod encoding. Thanks @urjaman for pointing out these routines can
|
||||
* be cleaned up a lot. */
|
||||
|
|
|
|||
|
|
@ -245,6 +245,15 @@ static const struct pandecode_flag_info mfbd_flag_info [] = {
|
|||
};
|
||||
#undef FLAG_INFO
|
||||
|
||||
#define FLAG_INFO(flag) { MALI_SAMP_##flag, "MALI_SAMP_" #flag }
|
||||
static const struct pandecode_flag_info sampler_flag_info [] = {
|
||||
FLAG_INFO(MAG_NEAREST),
|
||||
FLAG_INFO(MIN_NEAREST),
|
||||
FLAG_INFO(MIP_LINEAR_1),
|
||||
FLAG_INFO(MIP_LINEAR_2),
|
||||
{}
|
||||
};
|
||||
#undef FLAG_INFO
|
||||
|
||||
extern char *replace_fragment;
|
||||
extern char *replace_vertex;
|
||||
|
|
@ -1865,11 +1874,9 @@ pandecode_vertex_tiler_postfix_pre(const struct mali_vertex_tiler_postfix *p,
|
|||
pandecode_log("struct mali_sampler_descriptor sampler_descriptor_%"PRIx64"_%d_%d = {\n", d + sizeof(*s) * i, job_no, i);
|
||||
pandecode_indent++;
|
||||
|
||||
/* Only the lower two bits are understood right now; the rest we display as hex */
|
||||
pandecode_log(".filter_mode = MALI_TEX_MIN(%s) | MALI_TEX_MAG(%s) | 0x%" PRIx32",\n",
|
||||
MALI_FILTER_NAME(s->filter_mode & MALI_TEX_MIN_MASK),
|
||||
MALI_FILTER_NAME(s->filter_mode & MALI_TEX_MAG_MASK),
|
||||
s->filter_mode & ~3);
|
||||
pandecode_log(".filter_mode = ");
|
||||
pandecode_log_decoded_flags(sampler_flag_info, s->filter_mode);
|
||||
pandecode_log_cont(",\n");
|
||||
|
||||
pandecode_prop("min_lod = FIXED_16(%f)", DECODE_FIXED_16(s->min_lod));
|
||||
pandecode_prop("max_lod = FIXED_16(%f)", DECODE_FIXED_16(s->max_lod));
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue