[Mesa-dev] [PATCH 03/17] gallium: add NIR as a possible IR
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
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