On Wed, 2010-11-10 at 12:29 -0800, Marek Olšák wrote:
> Required because ATI and NVIDIA DX9 GPUs do not support indirect addressing
> of temps, inputs, outputs, and consts (FS-only) or the hw support is so
> limited that we cannot use it.
> 
> This should make r300g and possibly nvfx more feature complete.
> 
> Signed-off-by: Marek Olšák <mar...@gmail.com>
> ---
>  src/gallium/include/pipe/p_defines.h   |    5 +++++
>  src/mesa/state_tracker/st_extensions.c |    9 +++++++++
>  2 files changed, 14 insertions(+), 0 deletions(-)
> 
> diff --git a/src/gallium/include/pipe/p_defines.h 
> b/src/gallium/include/pipe/p_defines.h
> index 53f7b60..6cca301 100644
> --- a/src/gallium/include/pipe/p_defines.h
> +++ b/src/gallium/include/pipe/p_defines.h
> @@ -483,7 +483,12 @@ enum pipe_shader_cap
>     PIPE_SHADER_CAP_MAX_TEMPS,
>     PIPE_SHADER_CAP_MAX_ADDRS,
>     PIPE_SHADER_CAP_MAX_PREDS,
> +   /* boolean caps */
>     PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED,
> +   PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR,
> +   PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR,
> +   PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR,
> +   PIPE_SHADER_CAP_INDIRECT_CONST_ADDR,
>  };
>  
>  /**
> diff --git a/src/mesa/state_tracker/st_extensions.c 
> b/src/mesa/state_tracker/st_extensions.c
> index 2720f44..1327491 100644
> --- a/src/mesa/state_tracker/st_extensions.c
> +++ b/src/mesa/state_tracker/st_extensions.c
> @@ -175,6 +175,15 @@ void st_init_limits(struct st_context *st)
>  
>        options->EmitNoCont = !screen->get_shader_param(screen, i, 
> PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED);
>  
> +      options->EmitNoIndirectInput = !screen->get_shader_param(screen, i,
> +                                        PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR);
> +      options->EmitNoIndirectOutput = !screen->get_shader_param(screen, i,
> +                                        
> PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR);
> +      options->EmitNoIndirectTemp = !screveryeen->get_shader_param(screen, i,
> +                                        PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR);
> +      options->EmitNoIndirectUniform = !screen->get_shader_param(screen, i,
> +                                        PIPE_SHADER_CAP_INDIRECT_CONST_ADDR);
> +
>        if(options->EmitNoLoops)
>           options->MaxUnrollIterations = 
> MIN2(screen->get_shader_param(screen, i, PIPE_SHADER_CAP_MAX_INSTRUCTIONS), 
> 65536);
>     }

Marek,

I don't object the caps per se -- they seem unavoidable -- but this will
change the current behavior for all existing drivers.  So either this
change is immediately followed with one to implement handle these new
caps on all pipe drivers (it's OK if you don't even build them), or the
caps semantics should be negated, e.g,
PIPE_SHADER_CAP_NO_INDIRECT_INPUT_ADDR.

I don't feel strongly either way, but it has happened too often for
drivers nobody is currently looking at become broken due to new caps.

Jose

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to