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: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
@@ -26,6 +26,8 @@
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
#include "compiler/nir/nir.h"
|
||||
|
||||
#include "main/imports.h"
|
||||
#include "main/context.h"
|
||||
#include "main/macros.h"
|
||||
@@ -156,31 +158,49 @@ void st_init_limits(struct pipe_screen *screen,
|
||||
for (sh = 0; sh < PIPE_SHADER_TYPES; ++sh) {
|
||||
struct gl_shader_compiler_options *options;
|
||||
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) {
|
||||
case PIPE_SHADER_FRAGMENT:
|
||||
pc = &c->Program[MESA_SHADER_FRAGMENT];
|
||||
options = &c->ShaderCompilerOptions[MESA_SHADER_FRAGMENT];
|
||||
c->ShaderCompilerOptions[MESA_SHADER_FRAGMENT].NirOptions =
|
||||
nir_options;
|
||||
break;
|
||||
case PIPE_SHADER_VERTEX:
|
||||
pc = &c->Program[MESA_SHADER_VERTEX];
|
||||
options = &c->ShaderCompilerOptions[MESA_SHADER_VERTEX];
|
||||
c->ShaderCompilerOptions[MESA_SHADER_VERTEX].NirOptions =
|
||||
nir_options;
|
||||
break;
|
||||
case PIPE_SHADER_GEOMETRY:
|
||||
pc = &c->Program[MESA_SHADER_GEOMETRY];
|
||||
options = &c->ShaderCompilerOptions[MESA_SHADER_GEOMETRY];
|
||||
c->ShaderCompilerOptions[MESA_SHADER_GEOMETRY].NirOptions =
|
||||
nir_options;
|
||||
break;
|
||||
case PIPE_SHADER_TESS_CTRL:
|
||||
pc = &c->Program[MESA_SHADER_TESS_CTRL];
|
||||
options = &c->ShaderCompilerOptions[MESA_SHADER_TESS_CTRL];
|
||||
c->ShaderCompilerOptions[MESA_SHADER_TESS_CTRL].NirOptions =
|
||||
nir_options;
|
||||
break;
|
||||
case PIPE_SHADER_TESS_EVAL:
|
||||
pc = &c->Program[MESA_SHADER_TESS_EVAL];
|
||||
options = &c->ShaderCompilerOptions[MESA_SHADER_TESS_EVAL];
|
||||
c->ShaderCompilerOptions[MESA_SHADER_TESS_EVAL].NirOptions =
|
||||
nir_options;
|
||||
break;
|
||||
case PIPE_SHADER_COMPUTE:
|
||||
pc = &c->Program[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))
|
||||
continue;
|
||||
|
||||
@@ -304,14 +304,8 @@ st_glsl_to_nir(struct st_context *st, struct gl_program *prog,
|
||||
struct gl_shader_program *shader_program,
|
||||
gl_shader_stage stage)
|
||||
{
|
||||
struct pipe_screen *pscreen = st->pipe->screen;
|
||||
enum pipe_shader_type ptarget = pipe_shader_type_from_mesa(stage);
|
||||
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);
|
||||
const nir_shader_compiler_options *options =
|
||||
st->ctx->Const.ShaderCompilerOptions[prog->info.stage].NirOptions;
|
||||
assert(options);
|
||||
|
||||
if (prog->nir)
|
||||
|
||||
Reference in New Issue
Block a user