[Mesa-dev] [PATCH] r600g: add support for anisotropic filtering
Jerome Glisse
j.glisse at gmail.com
Fri May 6 18:23:58 PDT 2011
Please resend by attaching the patch not pasting it
On Fri, May 6, 2011 at 4:53 PM, Carl-Philip Haensch
<Carl-Philip.Haensch at mailbox.tu-dresden.de> wrote:
> From b5ad4e6fb399203afcfe2a5ccb35bb8ccad28b65 Mon Sep 17 00:00:00 2001
> From: Carl-Philip Haensch <carli at carli-laptop.(none)>
> Date: Fri, 6 May 2011 22:48:08 +0200
> Subject: [PATCH] r600g: add support for anisotropic filtering
>
> ---
> src/gallium/drivers/r600/r600_state.c | 20 +++++++++++++++++---
> src/gallium/drivers/r600/r600d.h | 9 +++++++++
> 2 files changed, 26 insertions(+), 3 deletions(-)
>
> diff --git a/src/gallium/drivers/r600/r600_state.c
> b/src/gallium/drivers/r600/r600_state.c
> index 3f979cf..aeffb9e 100644
> --- a/src/gallium/drivers/r600/r600_state.c
> +++ b/src/gallium/drivers/r600/r600_state.c
> @@ -364,6 +364,17 @@ static void *r600_create_rs_state(struct pipe_context
> *ctx,
> return rstate;
> }
>
> +
> +
> +static inline unsigned r600_tex_aniso_filter(unsigned filter)
> +{
> + if (filter <= 1) return 0;
> + if (filter <= 2) return 1;
> + if (filter <= 4) return 2;
> + if (filter <= 8) return 3;
> + /* else */ return 4;
> +}
> +
> static void *r600_create_sampler_state(struct pipe_context *ctx,
> const struct pipe_sampler_state
> *state)
> {
> @@ -376,13 +387,15 @@ static void *r600_create_sampler_state(struct
> pipe_context *ctx,
>
> rstate->id = R600_PIPE_STATE_SAMPLER;
> util_pack_color(state->border_color, PIPE_FORMAT_B8G8R8A8_UNORM,
> &uc);
> + unsigned aniso_flag_offset = state->max_anisotropy > 1 ? 4 : 0;
> r600_pipe_state_add_reg(rstate, R_03C000_SQ_TEX_SAMPLER_WORD0_0,
> S_03C000_CLAMP_X(r600_tex_wrap(state->wrap_s)) |
> S_03C000_CLAMP_Y(r600_tex_wrap(state->wrap_t)) |
> S_03C000_CLAMP_Z(r600_tex_wrap(state->wrap_r)) |
> -
> S_03C000_XY_MAG_FILTER(r600_tex_filter(state->mag_img_filter)) |
> -
> S_03C000_XY_MIN_FILTER(r600_tex_filter(state->min_img_filter)) |
> +
> S_03C000_XY_MAG_FILTER(r600_tex_filter(state->mag_img_filter) |
> aniso_flag_offset) |
> +
> S_03C000_XY_MIN_FILTER(r600_tex_filter(state->min_img_filter) |
> aniso_flag_offset) |
>
> S_03C000_MIP_FILTER(r600_tex_mipfilter(state->min_mip_filter)) |
> +
> S_03C000_ANISO(r600_tex_aniso_filter(state->max_anisotropy)) |
>
> S_03C000_DEPTH_COMPARE_FUNCTION(r600_tex_compare(state->compare_func)) |
> S_03C000_BORDER_COLOR_TYPE(uc.ui ?
> V_03C000_SQ_TEX_BORDER_COLOR_REGISTER : 0), 0xFFFFFFFF, NULL);
> r600_pipe_state_add_reg(rstate, R_03C004_SQ_TEX_SAMPLER_WORD1_0,
> @@ -492,7 +505,8 @@ static struct pipe_sampler_view
> *r600_create_sampler_view(struct pipe_context *c
> S_038014_BASE_ARRAY(state->u.tex.first_layer)
> |
> S_038014_LAST_ARRAY(state->u.tex.last_layer),
> 0xFFFFFFFF, NULL);
> r600_pipe_state_add_reg(rstate, R_038018_RESOURCE0_WORD6,
> -
> S_038018_TYPE(V_038010_SQ_TEX_VTX_VALID_TEXTURE), 0xFFFFFFFF, NULL);
> +
> S_038018_TYPE(V_038010_SQ_TEX_VTX_VALID_TEXTURE) |
> + S_038018_ANISO(4 /* max 16 samples */),
> 0xFFFFFFFF, NULL);
>
> return &resource->base;
> }
> diff --git a/src/gallium/drivers/r600/r600d.h
> b/src/gallium/drivers/r600/r600d.h
> index 8296b52..c997462 100644
> --- a/src/gallium/drivers/r600/r600d.h
> +++ b/src/gallium/drivers/r600/r600d.h
> @@ -1012,6 +1012,9 @@
> #define S_038018_MPEG_CLAMP(x) (((x) & 0x3) << 0)
> #define G_038018_MPEG_CLAMP(x) (((x) >> 0) & 0x3)
> #define C_038018_MPEG_CLAMP 0xFFFFFFFC
> +#define S_038018_ANISO(x) (((x) & 0x7) << 2)
> +#define G_038018_ANISO(x) (((x) >> 2) & 0x7)
> +#define C_038018_ANISO 0xFFFFFFE3
> #define S_038018_PERF_MODULATION(x) (((x) & 0x7) << 5)
> #define G_038018_PERF_MODULATION(x) (((x) >> 5) & 0x7)
> #define C_038018_PERF_MODULATION 0xFFFFFF1F
> @@ -1090,6 +1093,9 @@
> #define S_03C000_MIP_FILTER(x) (((x) & 0x3) << 17)
> #define G_03C000_MIP_FILTER(x) (((x) >> 17) & 0x3)
> #define C_03C000_MIP_FILTER 0xFFF9FFFF
> +#define S_03C000_ANISO(x) (((x) & 0x7) << 19)
> +#define G_03C000_ANISO(x) (((x) >> 19) & 0x7)
> +#define C_03C000_ANISO 0xFFB7FFFF
> #define S_03C000_BORDER_COLOR_TYPE(x) (((x) & 0x3) << 22)
> #define G_03C000_BORDER_COLOR_TYPE(x) (((x) >> 22) & 0x3)
> #define C_03C000_BORDER_COLOR_TYPE 0xFF3FFFFF
> @@ -1152,6 +1158,9 @@
> #define S_03C008_PERF_Z(x) (((x) & 0x3) << 18)
> #define G_03C008_PERF_Z(x) (((x) >> 18) & 0x3)
> #define C_03C008_PERF_Z 0xFFF3FFFF
> +#define S_03C008_ANISO_BIAS(x) (((x) & 0x3f) << 22)
> +#define G_03C008_ANISO_BIAS(x) (((x) >> 22) & 0x3f)
> +#define C_03C008_ANISO_BIAS (~(0x3f << 22))
> #define S_03C008_FETCH_4(x) (((x) & 0x1) << 26)
> #define G_03C008_FETCH_4(x) (((x) >> 26) & 0x1)
> #define C_03C008_FETCH_4 0xFBFFFFFF
> --
> 1.7.1
>
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
More information about the mesa-dev
mailing list