From 724a73509e1bc1ce3abf9500e457bb2911b642db Mon Sep 17 00:00:00 2001 From: Gert Wollny Date: Fri, 19 Apr 2019 08:43:05 +0200 Subject: [PATCH] softpipe: Prepare handling explicit gradients This only adds corde that is not yet enabled. Signed-off-by: Gert Wollny Reviewed-by: Roland Scheidegger --- .../drivers/softpipe/sp_state_sampler.c | 1 + src/gallium/drivers/softpipe/sp_tex_sample.c | 33 +++++++++++++++++++ src/gallium/drivers/softpipe/sp_tex_sample.h | 9 ++++- 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/softpipe/sp_state_sampler.c b/src/gallium/drivers/softpipe/sp_state_sampler.c index 751eb76e84b..356196c1917 100644 --- a/src/gallium/drivers/softpipe/sp_state_sampler.c +++ b/src/gallium/drivers/softpipe/sp_state_sampler.c @@ -127,6 +127,7 @@ softpipe_set_sampler_views(struct pipe_context *pipe, if (sp_sviewsrc) { memcpy(sp_sviewdst, sp_sviewsrc, sizeof(*sp_sviewsrc)); sp_sviewdst->compute_lambda = softpipe_get_lambda_func(&sp_sviewdst->base, shader); + sp_sviewdst->compute_lambda_from_grad = softpipe_get_lambda_from_grad_func(&sp_sviewdst->base, shader); sp_sviewdst->cache = softpipe->tex_cache[shader][start + i]; } else { diff --git a/src/gallium/drivers/softpipe/sp_tex_sample.c b/src/gallium/drivers/softpipe/sp_tex_sample.c index ce702c9bb78..bfd10b0736d 100644 --- a/src/gallium/drivers/softpipe/sp_tex_sample.c +++ b/src/gallium/drivers/softpipe/sp_tex_sample.c @@ -659,6 +659,39 @@ compute_lambda_vert(const struct sp_sampler_view *sview, } +static float +compute_lambda_vert_explicite_gradients(UNUSED const struct sp_sampler_view *sview, + UNUSED const float derivs[3][2][TGSI_QUAD_SIZE], + UNUSED int quad) +{ + return 0.0f; +} + + +compute_lambda_from_grad_func +softpipe_get_lambda_from_grad_func(const struct pipe_sampler_view *view, + enum pipe_shader_type shader) +{ + switch (view->target) { + case PIPE_BUFFER: + case PIPE_TEXTURE_1D: + case PIPE_TEXTURE_1D_ARRAY: + return compute_lambda_1d_explicit_gradients; + case PIPE_TEXTURE_2D: + case PIPE_TEXTURE_2D_ARRAY: + case PIPE_TEXTURE_RECT: + return compute_lambda_2d_explicit_gradients; + case PIPE_TEXTURE_CUBE: + case PIPE_TEXTURE_CUBE_ARRAY: + return compute_lambda_cube_explicit_gradients; + case PIPE_TEXTURE_3D: + return compute_lambda_3d_explicit_gradients; + default: + assert(0); + return compute_lambda_1d_explicit_gradients; + } +} + /** * Get a texel from a texture, using the texture tile cache. diff --git a/src/gallium/drivers/softpipe/sp_tex_sample.h b/src/gallium/drivers/softpipe/sp_tex_sample.h index f7774f5e883..44853b3b529 100644 --- a/src/gallium/drivers/softpipe/sp_tex_sample.h +++ b/src/gallium/drivers/softpipe/sp_tex_sample.h @@ -53,6 +53,10 @@ typedef float (*compute_lambda_func)(const struct sp_sampler_view *sp_sview, const float t[TGSI_QUAD_SIZE], const float p[TGSI_QUAD_SIZE]); +typedef float (*compute_lambda_from_grad_func)(const struct sp_sampler_view *sp_sview, + const float derivs[3][2][TGSI_QUAD_SIZE], + uint quad); + struct img_filter_args { float s; float t; @@ -116,7 +120,7 @@ struct sp_sampler_view /* these are different per shader type */ struct softpipe_tex_tile_cache *cache; compute_lambda_func compute_lambda; - + compute_lambda_from_grad_func compute_lambda_from_grad; }; struct sp_filter_funcs { @@ -158,6 +162,9 @@ compute_lambda_func softpipe_get_lambda_func(const struct pipe_sampler_view *view, enum pipe_shader_type shader); +compute_lambda_from_grad_func +softpipe_get_lambda_from_grad_func(const struct pipe_sampler_view *view, + enum pipe_shader_type shader); void * softpipe_create_sampler_state(struct pipe_context *pipe, -- 2.30.2