[Mesa-dev] [PATCH 03/17] gallium: add NIR as a possible IR

2016-05-09 Thread Rob Clark
From: Rob Clark 

Signed-off-by: Rob Clark 
Reviewed-by: Roland Scheidegger 
Reviewed-by: Marek Olšák 
---
 src/gallium/include/pipe/p_defines.h | 1 +
 src/gallium/include/pipe/p_screen.h  | 9 +
 src/gallium/include/pipe/p_state.h   | 6 ++
 3 files changed, 16 insertions(+)

diff --git a/src/gallium/include/pipe/p_defines.h 
b/src/gallium/include/pipe/p_defines.h
index 2f48109..0cea2e3 100644
--- a/src/gallium/include/pipe/p_defines.h
+++ b/src/gallium/include/pipe/p_defines.h
@@ -813,6 +813,7 @@ enum pipe_shader_ir
PIPE_SHADER_IR_TGSI = 0,
PIPE_SHADER_IR_LLVM,
PIPE_SHADER_IR_NATIVE,
+   PIPE_SHADER_IR_NIR,
 };
 
 /**
diff --git a/src/gallium/include/pipe/p_screen.h 
b/src/gallium/include/pipe/p_screen.h
index 3ac5f3c..755291a 100644
--- a/src/gallium/include/pipe/p_screen.h
+++ b/src/gallium/include/pipe/p_screen.h
@@ -275,6 +275,15 @@ struct pipe_screen {
 */
void (*query_memory_info)(struct pipe_screen *screen,
  struct pipe_memory_info *info);
+
+   /**
+* Get IR specific compiler options struct.  For PIPE_SHADER_IR_NIR this
+* returns a 'struct nir_shader_compiler_options'.  Drivers reporting
+* NIR as the preferred IR must implement this.
+*/
+   const void *(*get_compiler_options)(struct pipe_screen *screen,
+  enum pipe_shader_ir ir,
+  unsigned shader);
 };
 
 
diff --git a/src/gallium/include/pipe/p_state.h 
b/src/gallium/include/pipe/p_state.h
index 3f14e41..eacf9bb 100644
--- a/src/gallium/include/pipe/p_state.h
+++ b/src/gallium/include/pipe/p_state.h
@@ -221,6 +221,11 @@ struct pipe_stream_output_info
  *
  * TODO pipe_compute_state should probably get similar treatment to handle
  * multiple IR's in a cleaner way..
+ *
+ * NOTE: since it is expected that the consumer will want to perform
+ * additional passes on the nir_shader, the driver takes ownership of
+ * the nir_shader.  If state trackers need to hang on to the IR (for
+ * example, variant management), it should use nir_shader_clone().
  */
 struct pipe_shader_state
 {
@@ -230,6 +235,7 @@ struct pipe_shader_state
union {
   void *llvm;
   void *native;
+  void *nir;
} ir;
struct pipe_stream_output_info stream_output;
 };
-- 
2.5.5

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


Re: [Mesa-dev] [PATCH 03/17] gallium: add NIR as a possible IR

2016-05-16 Thread Jose Fonseca

On 09/05/16 20:33, Rob Clark wrote:

From: Rob Clark 

Signed-off-by: Rob Clark 
Reviewed-by: Roland Scheidegger 
Reviewed-by: Marek Olšák 
---
  src/gallium/include/pipe/p_defines.h | 1 +
  src/gallium/include/pipe/p_screen.h  | 9 +
  src/gallium/include/pipe/p_state.h   | 6 ++
  3 files changed, 16 insertions(+)

diff --git a/src/gallium/include/pipe/p_defines.h 
b/src/gallium/include/pipe/p_defines.h
index 2f48109..0cea2e3 100644
--- a/src/gallium/include/pipe/p_defines.h
+++ b/src/gallium/include/pipe/p_defines.h
@@ -813,6 +813,7 @@ enum pipe_shader_ir
 PIPE_SHADER_IR_TGSI = 0,
 PIPE_SHADER_IR_LLVM,
 PIPE_SHADER_IR_NATIVE,
+   PIPE_SHADER_IR_NIR,
  };

  /**
diff --git a/src/gallium/include/pipe/p_screen.h 
b/src/gallium/include/pipe/p_screen.h
index 3ac5f3c..755291a 100644
--- a/src/gallium/include/pipe/p_screen.h
+++ b/src/gallium/include/pipe/p_screen.h
@@ -275,6 +275,15 @@ struct pipe_screen {
  */
 void (*query_memory_info)(struct pipe_screen *screen,
   struct pipe_memory_info *info);
+
+   /**
+* Get IR specific compiler options struct.  For PIPE_SHADER_IR_NIR this
+* returns a 'struct nir_shader_compiler_options'.  Drivers reporting
+* NIR as the preferred IR must implement this.
+*/
+   const void *(*get_compiler_options)(struct pipe_screen *screen,
+  enum pipe_shader_ir ir,
+  unsigned shader);
  };


diff --git a/src/gallium/include/pipe/p_state.h 
b/src/gallium/include/pipe/p_state.h
index 3f14e41..eacf9bb 100644
--- a/src/gallium/include/pipe/p_state.h
+++ b/src/gallium/include/pipe/p_state.h
@@ -221,6 +221,11 @@ struct pipe_stream_output_info
   *
   * TODO pipe_compute_state should probably get similar treatment to handle
   * multiple IR's in a cleaner way..
+ *
+ * NOTE: since it is expected that the consumer will want to perform
+ * additional passes on the nir_shader, the driver takes ownership of
+ * the nir_shader.  If state trackers need to hang on to the IR (for
+ * example, variant management), it should use nir_shader_clone().
   */
  struct pipe_shader_state
  {
@@ -230,6 +235,7 @@ struct pipe_shader_state
 union {
void *llvm;
void *native;
+  void *nir;
 } ir;
 struct pipe_stream_output_info stream_output;
  };



FWIW,

Acked-by: Jose Fonseca 


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