We've had indirect addressing of inputs/outputs for a long time (tgsi supports it and softpipe/llvmpipe support it).

-Brian


On 11/11/2010 10:16 AM, Marek Olšák wrote:
BTW I remember that somebody said shader outputs (and inputs?) are not
indexable in TGSI, but now I added the CAP for it. Should that CAP go
away or are we gonna allow it?

Marek

On Wed, Nov 10, 2010 at 9:29 PM, Marek Olšák <mar...@gmail.com
<mailto:mar...@gmail.com>> 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 <mailto: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 =
    !screen->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);
        }
    --
    1.7.0.4



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

Reply via email to