[Mesa-dev] [PATCH 09/14] i965/fs: Provide compiler options using a flags argument
Topi Pohjolainen
topi.pohjolainen at intel.com
Wed May 25 16:08:44 UTC 2016
Signed-off-by: Topi Pohjolainen <topi.pohjolainen at intel.com>
---
src/intel/vulkan/anv_pipeline.c | 6 ++++--
src/mesa/drivers/dri/i965/brw_blorp.c | 5 ++---
src/mesa/drivers/dri/i965/brw_blorp.h | 3 +--
src/mesa/drivers/dri/i965/brw_blorp_blit.cpp | 2 +-
src/mesa/drivers/dri/i965/brw_blorp_clear.cpp | 4 +++-
src/mesa/drivers/dri/i965/brw_compiler.h | 8 ++++++--
src/mesa/drivers/dri/i965/brw_fs.cpp | 12 +++++++-----
src/mesa/drivers/dri/i965/brw_fs.h | 2 +-
src/mesa/drivers/dri/i965/brw_wm.c | 6 ++++--
9 files changed, 29 insertions(+), 19 deletions(-)
diff --git a/src/intel/vulkan/anv_pipeline.c b/src/intel/vulkan/anv_pipeline.c
index d63e50e..c56c377 100644
--- a/src/intel/vulkan/anv_pipeline.c
+++ b/src/intel/vulkan/anv_pipeline.c
@@ -679,10 +679,12 @@ anv_pipeline_compile_fs(struct anv_pipeline *pipeline,
ralloc_steal(mem_ctx, nir);
unsigned code_size;
+ const int flags =
+ BRW_FS_COMPILER_OPTION_ALLOW_SPILLING |
+ (pipeline->use_repclear ? BRW_FS_COMPILER_OPTION_REP_SEND : 0);
const unsigned *shader_code =
brw_compile_fs(compiler, NULL, mem_ctx, &key, &prog_data, nir,
- NULL, -1, -1, true, pipeline->use_repclear,
- &code_size, NULL);
+ NULL, -1, -1, flags, &code_size, NULL);
if (shader_code == NULL) {
ralloc_free(mem_ctx);
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
diff --git a/src/mesa/drivers/dri/i965/brw_blorp.c b/src/mesa/drivers/dri/i965/brw_blorp.c
index ce37838..7a5f1d2 100644
--- a/src/mesa/drivers/dri/i965/brw_blorp.c
+++ b/src/mesa/drivers/dri/i965/brw_blorp.c
@@ -167,8 +167,7 @@ nir_uniform_type_size(const struct glsl_type *type)
const unsigned *
brw_blorp_compile_nir_shader(struct brw_context *brw, struct nir_shader *nir,
- const struct brw_wm_prog_key *wm_key,
- bool use_repclear,
+ const struct brw_wm_prog_key *wm_key, int flags,
struct brw_blorp_prog_data *prog_data,
unsigned *program_size)
{
@@ -222,7 +221,7 @@ brw_blorp_compile_nir_shader(struct brw_context *brw, struct nir_shader *nir,
const unsigned *program =
brw_compile_fs(compiler, brw, mem_ctx, wm_key, &wm_prog_data, nir,
- NULL, -1, -1, false, use_repclear, program_size, NULL);
+ NULL, -1, -1, flags, program_size, NULL);
/* Copy the relavent bits of wm_prog_data over into the blorp prog data */
prog_data->dispatch_8 = wm_prog_data.dispatch_8;
diff --git a/src/mesa/drivers/dri/i965/brw_blorp.h b/src/mesa/drivers/dri/i965/brw_blorp.h
index 3918f83..4e619d2 100644
--- a/src/mesa/drivers/dri/i965/brw_blorp.h
+++ b/src/mesa/drivers/dri/i965/brw_blorp.h
@@ -373,8 +373,7 @@ void brw_blorp_init_wm_prog_key(struct brw_wm_prog_key *wm_key);
const unsigned *
brw_blorp_compile_nir_shader(struct brw_context *brw, struct nir_shader *nir,
- const struct brw_wm_prog_key *wm_key,
- bool use_repclear,
+ const struct brw_wm_prog_key *wm_key, int flags,
struct brw_blorp_prog_data *prog_data,
unsigned *program_size);
diff --git a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
index 1b8e112..633c438 100644
--- a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
+++ b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
@@ -1520,7 +1520,7 @@ brw_blorp_get_blit_kernel(struct brw_context *brw,
wm_key.tex.msaa_16 = prog_key->tex_samples == 16;
wm_key.multisample_fbo = prog_key->rt_samples > 1;
- program = brw_blorp_compile_nir_shader(brw, nir, &wm_key, false,
+ program = brw_blorp_compile_nir_shader(brw, nir, &wm_key, 0,
&prog_data, &program_size);
brw_upload_cache(&brw->cache, BRW_CACHE_BLORP_PROG,
diff --git a/src/mesa/drivers/dri/i965/brw_blorp_clear.cpp b/src/mesa/drivers/dri/i965/brw_blorp_clear.cpp
index 2515a04..5aa420f 100644
--- a/src/mesa/drivers/dri/i965/brw_blorp_clear.cpp
+++ b/src/mesa/drivers/dri/i965/brw_blorp_clear.cpp
@@ -83,8 +83,10 @@ brw_blorp_params_get_clear_kernel(struct brw_context *brw,
struct brw_blorp_prog_data prog_data;
unsigned program_size;
+ const int flags =
+ use_replicated_data ? BRW_FS_COMPILER_OPTION_REP_SEND : 0;
const unsigned *program =
- brw_blorp_compile_nir_shader(brw, b.shader, &wm_key, use_replicated_data,
+ brw_blorp_compile_nir_shader(brw, b.shader, &wm_key, flags,
&prog_data, &program_size);
brw_upload_cache(&brw->cache, BRW_CACHE_BLORP_PROG,
diff --git a/src/mesa/drivers/dri/i965/brw_compiler.h b/src/mesa/drivers/dri/i965/brw_compiler.h
index a8fb486..3c3b35a 100644
--- a/src/mesa/drivers/dri/i965/brw_compiler.h
+++ b/src/mesa/drivers/dri/i965/brw_compiler.h
@@ -127,6 +127,11 @@ enum PACKED gen6_gather_sampler_wa {
WA_16BIT = 4, /* if we have a 16bit format needing wa */
};
+enum {
+ BRW_FS_COMPILER_OPTION_ALLOW_SPILLING = 1 << 0,
+ BRW_FS_COMPILER_OPTION_REP_SEND = 1 << 1,
+};
+
/**
* Sampler information needed by VS, WM, and GS program cache keys.
*/
@@ -797,8 +802,7 @@ brw_compile_fs(const struct brw_compiler *compiler, void *log_data,
struct gl_program *prog,
int shader_time_index8,
int shader_time_index16,
- bool allow_spilling,
- bool use_rep_send,
+ int flags,
unsigned *final_assembly_size,
char **error_str);
diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp
index bb2caa5..4d0c7aa 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
@@ -5750,8 +5750,10 @@ fs_visitor::run_gs()
}
bool
-fs_visitor::run_fs(bool allow_spilling, bool do_rep_send)
+fs_visitor::run_fs(int flags)
{
+ const bool allow_spilling = flags & BRW_FS_COMPILER_OPTION_ALLOW_SPILLING;
+ const bool do_rep_send = flags & BRW_FS_COMPILER_OPTION_REP_SEND;
brw_wm_prog_data *wm_prog_data = (brw_wm_prog_data *) this->prog_data;
brw_wm_prog_key *wm_key = (brw_wm_prog_key *) this->key;
@@ -5982,8 +5984,7 @@ brw_compile_fs(const struct brw_compiler *compiler, void *log_data,
const nir_shader *src_shader,
struct gl_program *prog,
int shader_time_index8, int shader_time_index16,
- bool allow_spilling,
- bool use_rep_send,
+ int flags,
unsigned *final_assembly_size,
char **error_str)
{
@@ -6026,7 +6027,7 @@ brw_compile_fs(const struct brw_compiler *compiler, void *log_data,
fs_visitor v8(compiler, log_data, mem_ctx, key,
&prog_data->base, prog, shader, 8,
shader_time_index8);
- if (!v8.run_fs(allow_spilling, false /* do_rep_send */)) {
+ if (!v8.run_fs(flags & BRW_FS_COMPILER_OPTION_ALLOW_SPILLING)) {
if (error_str)
*error_str = ralloc_strdup(mem_ctx, v8.fail_msg);
@@ -6037,6 +6038,7 @@ brw_compile_fs(const struct brw_compiler *compiler, void *log_data,
simd8_grf_used = v8.grf_used;
}
+ const bool use_rep_send = flags & BRW_FS_COMPILER_OPTION_REP_SEND;
if (!v8.simd16_unsupported &&
likely(!(INTEL_DEBUG & DEBUG_NO16) || use_rep_send)) {
/* Try a SIMD16 compile */
@@ -6044,7 +6046,7 @@ brw_compile_fs(const struct brw_compiler *compiler, void *log_data,
&prog_data->base, prog, shader, 16,
shader_time_index16);
v16.import_uniforms(&v8);
- if (!v16.run_fs(allow_spilling, use_rep_send)) {
+ if (!v16.run_fs(flags)) {
compiler->shader_perf_log(log_data,
"SIMD16 shader failed to compile: %s",
v16.fail_msg);
diff --git a/src/mesa/drivers/dri/i965/brw_fs.h b/src/mesa/drivers/dri/i965/brw_fs.h
index 062fcd5..67fd3f5 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.h
+++ b/src/mesa/drivers/dri/i965/brw_fs.h
@@ -105,7 +105,7 @@ public:
uint32_t const_offset);
void DEP_RESOLVE_MOV(const brw::fs_builder &bld, int grf);
- bool run_fs(bool allow_spilling, bool do_rep_send);
+ bool run_fs(int flags);
bool run_vs(gl_clip_plane *clip_planes);
bool run_tcs_single_patch();
bool run_tes();
diff --git a/src/mesa/drivers/dri/i965/brw_wm.c b/src/mesa/drivers/dri/i965/brw_wm.c
index 1943d08..822bec8 100644
--- a/src/mesa/drivers/dri/i965/brw_wm.c
+++ b/src/mesa/drivers/dri/i965/brw_wm.c
@@ -135,11 +135,13 @@ brw_codegen_wm_prog(struct brw_context *brw,
}
char *error_str = NULL;
+ const int flags =
+ BRW_FS_COMPILER_OPTION_ALLOW_SPILLING |
+ (brw->use_rep_send ? BRW_FS_COMPILER_OPTION_REP_SEND : 0);
program = brw_compile_fs(brw->intelScreen->compiler, brw, mem_ctx,
key, &prog_data, fp->program.Base.nir,
&fp->program.Base, st_index8, st_index16,
- true, brw->use_rep_send,
- &program_size, &error_str);
+ flags, &program_size, &error_str);
if (program == NULL) {
if (prog) {
prog->LinkStatus = false;
--
2.5.5
More information about the mesa-dev
mailing list