summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRob Clark <[email protected]>2016-01-30 13:11:47 -0500
committerRob Clark <[email protected]>2016-05-11 12:20:11 -0400
commite1d80f8603defb049437dd828b43a5453486b70a (patch)
tree98070b70fa43b29e004c5031db02f19af510fa42 /src
parent425dc4c4b3663c619634de9f9f00c7765e7d0320 (diff)
gallium: add NIR as a possible IR
Signed-off-by: Rob Clark <[email protected]> Reviewed-by: Roland Scheidegger <[email protected]> Reviewed-by: Marek Olšák <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/gallium/include/pipe/p_defines.h1
-rw-r--r--src/gallium/include/pipe/p_screen.h9
-rw-r--r--src/gallium/include/pipe/p_state.h6
3 files changed, 16 insertions, 0 deletions
diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h
index 2f481091858..0cea2e3dadd 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 3ac5f3cc9ff..755291ae501 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 3f14e41dff1..eacf9bbe68b 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;
};