diff options
author | Rob Clark <robclark@freedesktop.org> | 2015-12-21 21:34:11 -0500 |
---|---|---|
committer | Rob Clark <robclark@freedesktop.org> | 2016-05-17 14:22:46 -0400 |
commit | 1e93b0caa10d9d9090eaa3bd517a5144930f28a4 (patch) | |
tree | d382c6e6defaff4dba20623d468134bbc69507b2 /src/mesa/state_tracker/st_glsl_to_tgsi.cpp | |
parent | 2bbb140be3cbc8e8428f21083b21abd7246ddc6e (diff) | |
download | external_mesa3d-1e93b0caa10d9d9090eaa3bd517a5144930f28a4.zip external_mesa3d-1e93b0caa10d9d9090eaa3bd517a5144930f28a4.tar.gz external_mesa3d-1e93b0caa10d9d9090eaa3bd517a5144930f28a4.tar.bz2 |
mesa/st: add support for NIR as possible driver IR
Signed-off-by: Rob Clark <robclark@freedesktop.org>
Acked-by: Eric Anholt <eric@anholt.net>
Diffstat (limited to 'src/mesa/state_tracker/st_glsl_to_tgsi.cpp')
-rw-r--r-- | src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 40 |
1 files changed, 36 insertions, 4 deletions
diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp index d8a0cb2..9d2057e 100644 --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp @@ -53,6 +53,7 @@ #include "st_mesa_to_tgsi.h" #include "st_format.h" #include "st_glsl_types.h" +#include "st_nir.h" #define PROGRAM_ANY_CONST ((1 << PROGRAM_STATE_VAR) | \ @@ -6437,9 +6438,9 @@ out: * generating Mesa IR. */ static struct gl_program * -get_mesa_program(struct gl_context *ctx, - struct gl_shader_program *shader_program, - struct gl_shader *shader) +get_mesa_program_tgsi(struct gl_context *ctx, + struct gl_shader_program *shader_program, + struct gl_shader *shader) { glsl_to_tgsi_visitor* v; struct gl_program *prog; @@ -6647,6 +6648,29 @@ get_mesa_program(struct gl_context *ctx, return prog; } +static struct gl_program * +get_mesa_program(struct gl_context *ctx, + struct gl_shader_program *shader_program, + struct gl_shader *shader) +{ + struct pipe_screen *pscreen = ctx->st->pipe->screen; + unsigned ptarget = st_shader_stage_to_ptarget(shader->Stage); + enum pipe_shader_ir preferred_ir = (enum pipe_shader_ir) + pscreen->get_shader_param(pscreen, ptarget, PIPE_SHADER_CAP_PREFERRED_IR); + if (preferred_ir == PIPE_SHADER_IR_NIR) { + /* TODO only for GLSL VS/FS for now: */ + switch (shader->Type) { + case GL_VERTEX_SHADER: + case GL_FRAGMENT_SHADER: + return st_nir_get_mesa_program(ctx, shader_program, shader); + default: + break; + } + } + return get_mesa_program_tgsi(ctx, shader_program, shader); +} + + extern "C" { static void @@ -6849,9 +6873,17 @@ st_translate_stream_output_info(glsl_to_tgsi_visitor *glsl_to_tgsi, const GLuint outputMapping[], struct pipe_stream_output_info *so) { - unsigned i; struct gl_transform_feedback_info *info = &glsl_to_tgsi->shader_program->LinkedTransformFeedback; + st_translate_stream_output_info2(info, outputMapping, so); +} + +void +st_translate_stream_output_info2(struct gl_transform_feedback_info *info, + const GLuint outputMapping[], + struct pipe_stream_output_info *so) +{ + unsigned i; for (i = 0; i < info->NumOutputs; i++) { so->output[i].register_index = |