freedreno/ir3: need different compiler options for a5xx
vertex_id_zero_based differs.. Signed-off-by: Rob Clark <robdclark@gmail.com>
This commit is contained in:
parent
4531e67c47
commit
c712a637b9
|
@ -676,7 +676,7 @@ fd_get_compiler_options(struct pipe_screen *pscreen,
|
||||||
struct fd_screen *screen = fd_screen(pscreen);
|
struct fd_screen *screen = fd_screen(pscreen);
|
||||||
|
|
||||||
if (is_ir3(screen))
|
if (is_ir3(screen))
|
||||||
return ir3_get_compiler_options();
|
return ir3_get_compiler_options(screen->compiler);
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -96,6 +96,8 @@ fixup_varying_slots(struct exec_list *var_list)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct ir3_compiler *compiler;
|
||||||
|
|
||||||
static nir_shader *
|
static nir_shader *
|
||||||
load_glsl(unsigned num_files, char* const* files, gl_shader_stage stage)
|
load_glsl(unsigned num_files, char* const* files, gl_shader_stage stage)
|
||||||
{
|
{
|
||||||
|
@ -109,7 +111,7 @@ load_glsl(unsigned num_files, char* const* files, gl_shader_stage stage)
|
||||||
if (!prog)
|
if (!prog)
|
||||||
errx(1, "couldn't parse `%s'", files[0]);
|
errx(1, "couldn't parse `%s'", files[0]);
|
||||||
|
|
||||||
nir_shader *nir = glsl_to_nir(prog, stage, ir3_get_compiler_options());
|
nir_shader *nir = glsl_to_nir(prog, stage, ir3_get_compiler_options(compiler));
|
||||||
|
|
||||||
standalone_compiler_cleanup(prog);
|
standalone_compiler_cleanup(prog);
|
||||||
|
|
||||||
|
@ -366,6 +368,8 @@ int main(int argc, char **argv)
|
||||||
|
|
||||||
nir_shader *nir;
|
nir_shader *nir;
|
||||||
|
|
||||||
|
compiler = ir3_compiler_create(NULL, gpu_id);
|
||||||
|
|
||||||
if (s.from_tgsi) {
|
if (s.from_tgsi) {
|
||||||
struct tgsi_token toks[65536];
|
struct tgsi_token toks[65536];
|
||||||
|
|
||||||
|
@ -392,7 +396,7 @@ int main(int argc, char **argv)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
s.compiler = ir3_compiler_create(NULL, gpu_id);
|
s.compiler = compiler;
|
||||||
s.nir = ir3_optimize_nir(&s, nir, NULL);
|
s.nir = ir3_optimize_nir(&s, nir, NULL);
|
||||||
|
|
||||||
v.key = key;
|
v.key = key;
|
||||||
|
|
|
@ -52,6 +52,23 @@ static const nir_shader_compiler_options options = {
|
||||||
.lower_extract_word = true,
|
.lower_extract_word = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const nir_shader_compiler_options options_5xx = {
|
||||||
|
.lower_fpow = true,
|
||||||
|
.lower_fsat = true,
|
||||||
|
.lower_scmp = true,
|
||||||
|
.lower_flrp32 = true,
|
||||||
|
.lower_flrp64 = true,
|
||||||
|
.lower_ffract = true,
|
||||||
|
.lower_fmod32 = true,
|
||||||
|
.lower_fmod64 = true,
|
||||||
|
.lower_fdiv = true,
|
||||||
|
.fuse_ffma = true,
|
||||||
|
.native_integers = true,
|
||||||
|
.vertex_id_zero_based = false,
|
||||||
|
.lower_extract_byte = true,
|
||||||
|
.lower_extract_word = true,
|
||||||
|
};
|
||||||
|
|
||||||
struct nir_shader *
|
struct nir_shader *
|
||||||
ir3_tgsi_to_nir(const struct tgsi_token *tokens)
|
ir3_tgsi_to_nir(const struct tgsi_token *tokens)
|
||||||
{
|
{
|
||||||
|
@ -59,8 +76,10 @@ ir3_tgsi_to_nir(const struct tgsi_token *tokens)
|
||||||
}
|
}
|
||||||
|
|
||||||
const nir_shader_compiler_options *
|
const nir_shader_compiler_options *
|
||||||
ir3_get_compiler_options(void)
|
ir3_get_compiler_options(struct ir3_compiler *compiler)
|
||||||
{
|
{
|
||||||
|
if (compiler->gpu_id >= 500)
|
||||||
|
return &options_5xx;
|
||||||
return &options;
|
return &options;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,7 @@ bool ir3_nir_lower_if_else(nir_shader *shader);
|
||||||
bool ir3_nir_apply_trig_workarounds(nir_shader *shader);
|
bool ir3_nir_apply_trig_workarounds(nir_shader *shader);
|
||||||
|
|
||||||
struct nir_shader * ir3_tgsi_to_nir(const struct tgsi_token *tokens);
|
struct nir_shader * ir3_tgsi_to_nir(const struct tgsi_token *tokens);
|
||||||
const nir_shader_compiler_options * ir3_get_compiler_options(void);
|
const nir_shader_compiler_options * ir3_get_compiler_options(struct ir3_compiler *compiler);
|
||||||
bool ir3_key_lowers_nir(const struct ir3_shader_key *key);
|
bool ir3_key_lowers_nir(const struct ir3_shader_key *key);
|
||||||
struct nir_shader * ir3_optimize_nir(struct ir3_shader *shader, nir_shader *s,
|
struct nir_shader * ir3_optimize_nir(struct ir3_shader *shader, nir_shader *s,
|
||||||
const struct ir3_shader_key *key);
|
const struct ir3_shader_key *key);
|
||||||
|
|
Loading…
Reference in New Issue