Reviewed-by: Brian Paul <bri...@vmware.com>
On Mon, Nov 25, 2013 at 7:43 PM, <srol...@vmware.com> wrote: > From: Roland Scheidegger <srol...@vmware.com> > > Ever since introducing separate sampler and sampler view max this was > really > missing. > Every driver but llvmpipe reports the same number as number of samplers for > now, so nothing should break. > --- > src/gallium/auxiliary/gallivm/lp_bld_limits.h | 2 ++ > src/gallium/docs/source/screen.rst | 4 +++- > src/gallium/drivers/freedreno/freedreno_screen.c | 1 + > src/gallium/drivers/i915/i915_screen.c | 2 ++ > src/gallium/drivers/ilo/ilo_screen.c | 2 ++ > src/gallium/drivers/llvmpipe/lp_screen.c | 5 +++++ > src/gallium/drivers/nouveau/nv30/nv30_screen.c | 2 ++ > src/gallium/drivers/nouveau/nv50/nv50_screen.c | 2 ++ > src/gallium/drivers/nouveau/nvc0/nvc0_screen.c | 6 ++---- > src/gallium/drivers/r300/r300_screen.c | 3 +++ > src/gallium/drivers/r600/r600_pipe.c | 1 + > src/gallium/drivers/radeonsi/radeonsi_pipe.c | 1 + > src/gallium/drivers/softpipe/sp_screen.c | 5 +++-- > src/gallium/drivers/svga/svga_screen.c | 2 ++ > src/gallium/include/pipe/p_defines.h | 3 ++- > 15 files changed, 33 insertions(+), 8 deletions(-) > > diff --git a/src/gallium/auxiliary/gallivm/lp_bld_limits.h > b/src/gallium/auxiliary/gallivm/lp_bld_limits.h > index 5675e36..521b45b 100644 > --- a/src/gallium/auxiliary/gallivm/lp_bld_limits.h > +++ b/src/gallium/auxiliary/gallivm/lp_bld_limits.h > @@ -112,6 +112,8 @@ gallivm_get_shader_param(enum pipe_shader_cap param) > return 1; > case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS: > return PIPE_MAX_SAMPLERS; > + case PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS: > + return PIPE_MAX_SHADER_SAMPLER_VIEWS; > case PIPE_SHADER_CAP_TGSI_SQRT_SUPPORTED: > return 1; > default: > diff --git a/src/gallium/docs/source/screen.rst > b/src/gallium/docs/source/screen.rst > index a01f548..035309d 100644 > --- a/src/gallium/docs/source/screen.rst > +++ b/src/gallium/docs/source/screen.rst > @@ -247,10 +247,12 @@ to be 0. > BGNSUB, ENDSUB, CAL, and RET, including RET in the main block. > * ``PIPE_SHADER_CAP_INTEGERS``: Whether integer opcodes are supported. > If unsupported, only float opcodes are supported. > -* ``PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS``: THe maximum number of texture > +* ``PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS``: The maximum number of texture > samplers. > * ``PIPE_SHADER_CAP_PREFERRED_IR``: Preferred representation of the > program. It should be one of the ``pipe_shader_ir`` enum values. > +* ``PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS``: The maximum number of texture > + sampler views. Must not be lower than > PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS. > > > .. _pipe_compute_cap: > diff --git a/src/gallium/drivers/freedreno/freedreno_screen.c > b/src/gallium/drivers/freedreno/freedreno_screen.c > index 20adf21..5dafa92 100644 > --- a/src/gallium/drivers/freedreno/freedreno_screen.c > +++ b/src/gallium/drivers/freedreno/freedreno_screen.c > @@ -323,6 +323,7 @@ fd_screen_get_shader_param(struct pipe_screen > *pscreen, unsigned shader, > */ > return 0; > case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS: > + case PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS: > return 16; > case PIPE_SHADER_CAP_PREFERRED_IR: > return PIPE_SHADER_IR_TGSI; > diff --git a/src/gallium/drivers/i915/i915_screen.c > b/src/gallium/drivers/i915/i915_screen.c > index 77607d0..5e1e18d 100644 > --- a/src/gallium/drivers/i915/i915_screen.c > +++ b/src/gallium/drivers/i915/i915_screen.c > @@ -106,6 +106,7 @@ i915_get_shader_param(struct pipe_screen *screen, > unsigned shader, enum pipe_sha > case PIPE_SHADER_VERTEX: > switch (cap) { > case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS: > + case PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS: > if (debug_get_bool_option("DRAW_USE_LLVM", TRUE)) > return PIPE_MAX_SAMPLERS; > else > @@ -151,6 +152,7 @@ i915_get_shader_param(struct pipe_screen *screen, > unsigned shader, enum pipe_sha > case PIPE_SHADER_CAP_INTEGERS: > return 0; > case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS: > + case PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS: > return I915_TEX_UNITS; > default: > debug_printf("%s: Unknown cap %u.\n", __FUNCTION__, cap); > diff --git a/src/gallium/drivers/ilo/ilo_screen.c > b/src/gallium/drivers/ilo/ilo_screen.c > index a345b70..d6e3f94 100644 > --- a/src/gallium/drivers/ilo/ilo_screen.c > +++ b/src/gallium/drivers/ilo/ilo_screen.c > @@ -141,6 +141,8 @@ ilo_get_shader_param(struct pipe_screen *screen, > unsigned shader, > return 1; > case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS: > return ILO_MAX_SAMPLERS; > + case PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS: > + return ILO_MAX_SAMPLER_VIEWS; > case PIPE_SHADER_CAP_PREFERRED_IR: > return PIPE_SHADER_IR_TGSI; > case PIPE_SHADER_CAP_TGSI_SQRT_SUPPORTED: > diff --git a/src/gallium/drivers/llvmpipe/lp_screen.c > b/src/gallium/drivers/llvmpipe/lp_screen.c > index f61df98..81ebc69 100644 > --- a/src/gallium/drivers/llvmpipe/lp_screen.c > +++ b/src/gallium/drivers/llvmpipe/lp_screen.c > @@ -262,6 +262,11 @@ llvmpipe_get_shader_param(struct pipe_screen *screen, > unsigned shader, enum pipe > return PIPE_MAX_SAMPLERS; > else > return 0; > + case PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS: > + if (debug_get_bool_option("DRAW_USE_LLVM", TRUE)) > + return PIPE_MAX_SHADER_SAMPLER_VIEWS; > + else > + return 0; > default: > return draw_get_shader_param(shader, param); > } > diff --git a/src/gallium/drivers/nouveau/nv30/nv30_screen.c > b/src/gallium/drivers/nouveau/nv30/nv30_screen.c > index 807100e..26ff681 100644 > --- a/src/gallium/drivers/nouveau/nv30/nv30_screen.c > +++ b/src/gallium/drivers/nouveau/nv30/nv30_screen.c > @@ -190,6 +190,7 @@ nv30_screen_get_shader_param(struct pipe_screen > *pscreen, unsigned shader, > case PIPE_SHADER_CAP_MAX_TEMPS: > return (eng3d->oclass >= NV40_3D_CLASS) ? 32 : 13; > case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS: > + case PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS: > return 0; > case PIPE_SHADER_CAP_MAX_ADDRS: > return 2; > @@ -228,6 +229,7 @@ nv30_screen_get_shader_param(struct pipe_screen > *pscreen, unsigned shader, > case PIPE_SHADER_CAP_MAX_ADDRS: > return (eng3d->oclass >= NV40_3D_CLASS) ? 1 : 0; > case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS: > + case PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS: > return 16; > case PIPE_SHADER_CAP_MAX_PREDS: > case PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED: > diff --git a/src/gallium/drivers/nouveau/nv50/nv50_screen.c > b/src/gallium/drivers/nouveau/nv50/nv50_screen.c > index 0ce9e34..f7dfc98 100644 > --- a/src/gallium/drivers/nouveau/nv50/nv50_screen.c > +++ b/src/gallium/drivers/nouveau/nv50/nv50_screen.c > @@ -250,6 +250,8 @@ nv50_screen_get_shader_param(struct pipe_screen > *pscreen, unsigned shader, > case PIPE_SHADER_CAP_INTEGERS: > return 1; > case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS: > + /* The chip could handle more sampler views than samplers */ > + case PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS: > return MIN2(32, PIPE_MAX_SAMPLERS); > default: > NOUVEAU_ERR("unknown PIPE_SHADER_CAP %d\n", param); > diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c > b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c > index b203089..cc5814e 100644 > --- a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c > +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c > @@ -253,10 +253,8 @@ nvc0_screen_get_shader_param(struct pipe_screen > *pscreen, unsigned shader, > return 1; > case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS: > return 16; /* would be 32 in linked (OpenGL-style) mode */ > - /* > - case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLER_VIEWS: > - return 32; > - */ > + case PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS: > + return 16; /* XXX not sure if more are really safe */ > default: > NOUVEAU_ERR("unknown PIPE_SHADER_CAP %d\n", param); > return 0; > diff --git a/src/gallium/drivers/r300/r300_screen.c > b/src/gallium/drivers/r300/r300_screen.c > index 476770a..c21ee68 100644 > --- a/src/gallium/drivers/r300/r300_screen.c > +++ b/src/gallium/drivers/r300/r300_screen.c > @@ -238,6 +238,7 @@ static int r300_get_shader_param(struct pipe_screen > *pscreen, unsigned shader, e > case PIPE_SHADER_CAP_MAX_PREDS: > return is_r500 ? 1 : 0; > case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS: > + case PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS: > return r300screen->caps.num_tex_units; > case PIPE_SHADER_CAP_MAX_ADDRS: > case PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED: > @@ -257,6 +258,7 @@ static int r300_get_shader_param(struct pipe_screen > *pscreen, unsigned shader, e > switch (param) > { > case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS: > + case PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS: > case PIPE_SHADER_CAP_SUBROUTINES: > return 0; > default:; > @@ -297,6 +299,7 @@ static int r300_get_shader_param(struct pipe_screen > *pscreen, unsigned shader, e > case PIPE_SHADER_CAP_SUBROUTINES: > case PIPE_SHADER_CAP_INTEGERS: > case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS: > + case PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS: > return 0; > case PIPE_SHADER_CAP_PREFERRED_IR: > return PIPE_SHADER_IR_TGSI; > diff --git a/src/gallium/drivers/r600/r600_pipe.c > b/src/gallium/drivers/r600/r600_pipe.c > index 633c22a..5e1d262 100644 > --- a/src/gallium/drivers/r600/r600_pipe.c > +++ b/src/gallium/drivers/r600/r600_pipe.c > @@ -597,6 +597,7 @@ static int r600_get_shader_param(struct pipe_screen* > pscreen, unsigned shader, e > case PIPE_SHADER_CAP_INTEGERS: > return 1; > case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS: > + case PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS: > return 16; > case PIPE_SHADER_CAP_PREFERRED_IR: > if (shader == PIPE_SHADER_COMPUTE) { > diff --git a/src/gallium/drivers/radeonsi/radeonsi_pipe.c > b/src/gallium/drivers/radeonsi/radeonsi_pipe.c > index e662e78..1ff8c14 100644 > --- a/src/gallium/drivers/radeonsi/radeonsi_pipe.c > +++ b/src/gallium/drivers/radeonsi/radeonsi_pipe.c > @@ -492,6 +492,7 @@ static int r600_get_shader_param(struct pipe_screen* > pscreen, unsigned shader, e > case PIPE_SHADER_CAP_SUBROUTINES: > return 0; > case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS: > + case PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS: > return 16; > case PIPE_SHADER_CAP_PREFERRED_IR: > return PIPE_SHADER_IR_TGSI; > diff --git a/src/gallium/drivers/softpipe/sp_screen.c > b/src/gallium/drivers/softpipe/sp_screen.c > index 47ef20e..0ec0aad 100644 > --- a/src/gallium/drivers/softpipe/sp_screen.c > +++ b/src/gallium/drivers/softpipe/sp_screen.c > @@ -204,13 +204,14 @@ softpipe_get_shader_param(struct pipe_screen > *screen, unsigned shader, enum pipe > case PIPE_SHADER_GEOMETRY: > switch (param) { > case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS: > + case PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS: > if (sp_screen->use_llvm) > /* Softpipe doesn't yet know how to tell draw/llvm about > textures */ > return 0; > - else > + else > return PIPE_MAX_SAMPLERS; > default: > - if (sp_screen->use_llvm) > + if (sp_screen->use_llvm) > return draw_get_shader_param(shader, param); > else > return draw_get_shader_param_no_llvm(shader, param); > diff --git a/src/gallium/drivers/svga/svga_screen.c > b/src/gallium/drivers/svga/svga_screen.c > index c16be16..977dec5 100644 > --- a/src/gallium/drivers/svga/svga_screen.c > +++ b/src/gallium/drivers/svga/svga_screen.c > @@ -332,6 +332,7 @@ static int svga_get_shader_param(struct pipe_screen > *screen, unsigned shader, en > case PIPE_SHADER_CAP_INTEGERS: > return 0; > case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS: > + case PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS: > return 16; > default: > debug_printf("Unexpected fragment shader query %u\n", param); > @@ -382,6 +383,7 @@ static int svga_get_shader_param(struct pipe_screen > *screen, unsigned shader, en > case PIPE_SHADER_CAP_INTEGERS: > return 0; > case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS: > + case PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS: > return 0; > default: > debug_printf("Unexpected vertex shader query %u\n", param); > diff --git a/src/gallium/include/pipe/p_defines.h > b/src/gallium/include/pipe/p_defines.h > index db6db32..7e71e77 100644 > --- a/src/gallium/include/pipe/p_defines.h > +++ b/src/gallium/include/pipe/p_defines.h > @@ -571,7 +571,8 @@ enum pipe_shader_cap > PIPE_SHADER_CAP_INTEGERS = 17, > PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS = 18, > PIPE_SHADER_CAP_PREFERRED_IR = 19, > - PIPE_SHADER_CAP_TGSI_SQRT_SUPPORTED = 20 > + PIPE_SHADER_CAP_TGSI_SQRT_SUPPORTED = 20, > + PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS = 21 > }; > > /** > -- > 1.7.9.5 > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev