[Mesa-dev] [PATCH 2/3] gallium: new shader cap bit for the amount of sampler views
Brian Paul
brian.e.paul at gmail.com
Sun Dec 1 04:10:30 PST 2013
Reviewed-by: Brian Paul <brianp at vmware.com>
On Mon, Nov 25, 2013 at 7:43 PM, <sroland at vmware.com> wrote:
> From: Roland Scheidegger <sroland at 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 at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20131201/d0c1093c/attachment-0001.html>
More information about the mesa-dev
mailing list