Commit 93e213f9 authored by Timothy Arceri's avatar Timothy Arceri

st/glsl_to_nir: copy nir compiler options to context

Various nir passes may expect this to be here as does the nir
serialisation pass.
Reviewed-by: default avatarMarek Olšák <marek.olsak@amd.com>
parent dd6d6c63
...@@ -26,6 +26,8 @@ ...@@ -26,6 +26,8 @@
* *
**************************************************************************/ **************************************************************************/
#include "compiler/nir/nir.h"
#include "main/imports.h" #include "main/imports.h"
#include "main/context.h" #include "main/context.h"
#include "main/macros.h" #include "main/macros.h"
...@@ -156,31 +158,49 @@ void st_init_limits(struct pipe_screen *screen, ...@@ -156,31 +158,49 @@ void st_init_limits(struct pipe_screen *screen,
for (sh = 0; sh < PIPE_SHADER_TYPES; ++sh) { for (sh = 0; sh < PIPE_SHADER_TYPES; ++sh) {
struct gl_shader_compiler_options *options; struct gl_shader_compiler_options *options;
struct gl_program_constants *pc; struct gl_program_constants *pc;
const nir_shader_compiler_options *nir_options = NULL;
if (screen->get_compiler_options) {
nir_options = (const nir_shader_compiler_options *)
screen->get_compiler_options(screen, PIPE_SHADER_IR_NIR, sh);
}
switch (sh) { switch (sh) {
case PIPE_SHADER_FRAGMENT: case PIPE_SHADER_FRAGMENT:
pc = &c->Program[MESA_SHADER_FRAGMENT]; pc = &c->Program[MESA_SHADER_FRAGMENT];
options = &c->ShaderCompilerOptions[MESA_SHADER_FRAGMENT]; options = &c->ShaderCompilerOptions[MESA_SHADER_FRAGMENT];
c->ShaderCompilerOptions[MESA_SHADER_FRAGMENT].NirOptions =
nir_options;
break; break;
case PIPE_SHADER_VERTEX: case PIPE_SHADER_VERTEX:
pc = &c->Program[MESA_SHADER_VERTEX]; pc = &c->Program[MESA_SHADER_VERTEX];
options = &c->ShaderCompilerOptions[MESA_SHADER_VERTEX]; options = &c->ShaderCompilerOptions[MESA_SHADER_VERTEX];
c->ShaderCompilerOptions[MESA_SHADER_VERTEX].NirOptions =
nir_options;
break; break;
case PIPE_SHADER_GEOMETRY: case PIPE_SHADER_GEOMETRY:
pc = &c->Program[MESA_SHADER_GEOMETRY]; pc = &c->Program[MESA_SHADER_GEOMETRY];
options = &c->ShaderCompilerOptions[MESA_SHADER_GEOMETRY]; options = &c->ShaderCompilerOptions[MESA_SHADER_GEOMETRY];
c->ShaderCompilerOptions[MESA_SHADER_GEOMETRY].NirOptions =
nir_options;
break; break;
case PIPE_SHADER_TESS_CTRL: case PIPE_SHADER_TESS_CTRL:
pc = &c->Program[MESA_SHADER_TESS_CTRL]; pc = &c->Program[MESA_SHADER_TESS_CTRL];
options = &c->ShaderCompilerOptions[MESA_SHADER_TESS_CTRL]; options = &c->ShaderCompilerOptions[MESA_SHADER_TESS_CTRL];
c->ShaderCompilerOptions[MESA_SHADER_TESS_CTRL].NirOptions =
nir_options;
break; break;
case PIPE_SHADER_TESS_EVAL: case PIPE_SHADER_TESS_EVAL:
pc = &c->Program[MESA_SHADER_TESS_EVAL]; pc = &c->Program[MESA_SHADER_TESS_EVAL];
options = &c->ShaderCompilerOptions[MESA_SHADER_TESS_EVAL]; options = &c->ShaderCompilerOptions[MESA_SHADER_TESS_EVAL];
c->ShaderCompilerOptions[MESA_SHADER_TESS_EVAL].NirOptions =
nir_options;
break; break;
case PIPE_SHADER_COMPUTE: case PIPE_SHADER_COMPUTE:
pc = &c->Program[MESA_SHADER_COMPUTE]; pc = &c->Program[MESA_SHADER_COMPUTE];
options = &c->ShaderCompilerOptions[MESA_SHADER_COMPUTE]; options = &c->ShaderCompilerOptions[MESA_SHADER_COMPUTE];
c->ShaderCompilerOptions[MESA_SHADER_COMPUTE].NirOptions =
nir_options;
if (!screen->get_param(screen, PIPE_CAP_COMPUTE)) if (!screen->get_param(screen, PIPE_CAP_COMPUTE))
continue; continue;
......
...@@ -304,14 +304,8 @@ st_glsl_to_nir(struct st_context *st, struct gl_program *prog, ...@@ -304,14 +304,8 @@ st_glsl_to_nir(struct st_context *st, struct gl_program *prog,
struct gl_shader_program *shader_program, struct gl_shader_program *shader_program,
gl_shader_stage stage) gl_shader_stage stage)
{ {
struct pipe_screen *pscreen = st->pipe->screen; const nir_shader_compiler_options *options =
enum pipe_shader_type ptarget = pipe_shader_type_from_mesa(stage); st->ctx->Const.ShaderCompilerOptions[prog->info.stage].NirOptions;
const nir_shader_compiler_options *options;
assert(pscreen->get_compiler_options); /* drivers using NIR must implement this */
options = (const nir_shader_compiler_options *)
pscreen->get_compiler_options(pscreen, PIPE_SHADER_IR_NIR, ptarget);
assert(options); assert(options);
if (prog->nir) if (prog->nir)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment