radeonsi: add GL_EXT_texture_filter_minmax extension
Reviewed-by: Marek Olšák <marek.olsak@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29653>
This commit is contained in:

committed by
Marge Bot

parent
11c27a6237
commit
1f9bafbc74
@@ -188,6 +188,12 @@ static int si_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||
case PIPE_CAP_CL_GL_SHARING:
|
||||
return 1;
|
||||
|
||||
/* Tahiti and Verde only: reduction mode is unsupported due to a bug
|
||||
* (it might work sometimes, but that's not enough)
|
||||
*/
|
||||
case PIPE_CAP_SAMPLER_REDUCTION_MINMAX:
|
||||
return !(sscreen->info.family == CHIP_TAHITI || sscreen->info.family == CHIP_VERDE);
|
||||
|
||||
case PIPE_CAP_TEXTURE_TRANSFER_MODES:
|
||||
return PIPE_TEXTURE_TRANSFER_BLIT | PIPE_TEXTURE_TRANSFER_COMPUTE;
|
||||
|
||||
|
@@ -4331,6 +4331,21 @@ static inline unsigned si_tex_aniso_filter(unsigned filter)
|
||||
return 4;
|
||||
}
|
||||
|
||||
static unsigned si_tex_filter_mode(unsigned mode)
|
||||
{
|
||||
switch (mode) {
|
||||
case PIPE_TEX_REDUCTION_WEIGHTED_AVERAGE:
|
||||
return V_008F30_SQ_IMG_FILTER_MODE_BLEND;
|
||||
case PIPE_TEX_REDUCTION_MIN:
|
||||
return V_008F30_SQ_IMG_FILTER_MODE_MIN;
|
||||
case PIPE_TEX_REDUCTION_MAX:
|
||||
return V_008F30_SQ_IMG_FILTER_MODE_MAX;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void *si_create_sampler_state(struct pipe_context *ctx,
|
||||
const struct pipe_sampler_state *state)
|
||||
{
|
||||
@@ -4339,6 +4354,7 @@ static void *si_create_sampler_state(struct pipe_context *ctx,
|
||||
struct si_sampler_state *rstate = CALLOC_STRUCT(si_sampler_state);
|
||||
unsigned max_aniso = sscreen->force_aniso >= 0 ? sscreen->force_aniso : state->max_anisotropy;
|
||||
unsigned max_aniso_ratio = si_tex_aniso_filter(max_aniso);
|
||||
unsigned filter_mode = si_tex_filter_mode(state->reduction_mode);
|
||||
bool trunc_coord = (state->min_img_filter == PIPE_TEX_FILTER_NEAREST &&
|
||||
state->mag_img_filter == PIPE_TEX_FILTER_NEAREST &&
|
||||
state->compare_mode == PIPE_TEX_COMPARE_NONE) ||
|
||||
@@ -4379,6 +4395,7 @@ static void *si_create_sampler_state(struct pipe_context *ctx,
|
||||
.unnormalized_coords = state->unnormalized_coords,
|
||||
.cube_wrap = state->seamless_cube_map,
|
||||
.trunc_coord = trunc_coord,
|
||||
.filter_mode = filter_mode,
|
||||
.mag_filter = si_tex_filter(state->mag_img_filter, max_aniso),
|
||||
.min_filter = si_tex_filter(state->min_img_filter, max_aniso),
|
||||
.mip_filter = si_tex_mipfilter(state->min_mip_filter),
|
||||
|
Reference in New Issue
Block a user