Re: [Mesa-dev] [PATCH] gallium: add CAPs for indirect addressing and lower it in st/mesa when needed

2010-11-11 Thread Marek Olšák
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 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 = !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


Re: [Mesa-dev] [PATCH] gallium: add CAPs for indirect addressing and lower it in st/mesa when needed

2010-11-11 Thread Brian Paul
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


[Mesa-dev] [PATCH] gallium: add CAPs for indirect addressing and lower it in st/mesa when needed

2010-11-10 Thread Marek Olšák
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 = !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


Re: [Mesa-dev] [PATCH] gallium: add CAPs for indirect addressing and lower it in st/mesa when needed

2010-11-10 Thread José Fonseca
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


Re: [Mesa-dev] [PATCH] gallium: add CAPs for indirect addressing and lower it in st/mesa when needed

2010-11-10 Thread Marek Olšák
On Wed, Nov 10, 2010 at 9:48 PM, José Fonseca jfons...@vmware.com wrote:

 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.


I was going to fix get_shader_param in all the drivers afterwards to match
the current behavior. I am well aware of the consequences the patch would
have.

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


Re: [Mesa-dev] [PATCH] gallium: add CAPs for indirect addressing and lower it in st/mesa when needed

2010-11-10 Thread José Fonseca
On Wed, 2010-11-10 at 13:24 -0800, Marek Olšák wrote:
 On Wed, Nov 10, 2010 at 9:48 PM, José Fonseca 
 jfons...@vmware.commailto:jfons...@vmware.com wrote:
 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.commailto: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.
 
 
 I was going to fix get_shader_param in all the drivers afterwards to match 
 the current behavior. I am well aware of the consequences the patch would 
 have.

Great. Sorry for stating the obvious.

Looks good to me FWIW.

Jose

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