[Mesa-dev] [PATCH 11/17] i965/fs: Rework wm_fs_emit to take a nir_shader and a brw_compiler
Jason Ekstrand
jason at jlekstrand.net
Sat Oct 10 08:09:25 PDT 2015
Ignore this. It's just an accidental re-send.
On Sat, Oct 10, 2015 at 8:04 AM, Jason Ekstrand <jason at jlekstrand.net> wrote:
> This commit removes all dependence on GL state by getting rid of the
> brw_context parameter and the GL data structures.
> ---
> src/mesa/drivers/dri/i965/brw_fs.cpp | 59 ++++++++++++++++--------------------
> src/mesa/drivers/dri/i965/brw_wm.c | 14 +++++++--
> src/mesa/drivers/dri/i965/brw_wm.h | 13 +++++---
> 3 files changed, 47 insertions(+), 39 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp
> index 3c83f2a..8bdc676 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
> @@ -5115,40 +5115,39 @@ fs_visitor::run_cs()
> }
>
> const unsigned *
> -brw_wm_fs_emit(struct brw_context *brw,
> +brw_wm_fs_emit(const struct brw_compiler *compiler, void *log_data,
> void *mem_ctx,
> const struct brw_wm_prog_key *key,
> struct brw_wm_prog_data *prog_data,
> - struct gl_fragment_program *fp,
> - struct gl_shader_program *prog,
> + const nir_shader *shader,
> + struct gl_program *prog,
> int shader_time_index8, int shader_time_index16,
> - unsigned *final_assembly_size)
> + bool use_rep_send,
> + unsigned *final_assembly_size,
> + char **error_str)
> {
> - /* Now the main event: Visit the shader IR and generate our FS IR for it.
> - */
> - fs_visitor v(brw->intelScreen->compiler, brw, mem_ctx, key,
> - &prog_data->base, &fp->Base, fp->Base.nir, 8, shader_time_index8);
> + fs_visitor v(compiler, log_data, mem_ctx, key,
> + &prog_data->base, prog, shader, 8,
> + shader_time_index8);
> if (!v.run_fs(false /* do_rep_send */)) {
> - if (prog) {
> - prog->LinkStatus = false;
> - ralloc_strcat(&prog->InfoLog, v.fail_msg);
> - }
> -
> - _mesa_problem(NULL, "Failed to compile fragment shader: %s\n",
> - v.fail_msg);
> + if (error_str)
> + *error_str = ralloc_strdup(mem_ctx, v.fail_msg);
>
> return NULL;
> }
>
> cfg_t *simd16_cfg = NULL;
> - fs_visitor v2(brw->intelScreen->compiler, brw, mem_ctx, key,
> - &prog_data->base, &fp->Base, fp->Base.nir, 16, shader_time_index16);
> - if (likely(!(INTEL_DEBUG & DEBUG_NO16) || brw->use_rep_send)) {
> + fs_visitor v2(compiler, log_data, mem_ctx, key,
> + &prog_data->base, prog, shader, 16,
> + shader_time_index16);
> + if (likely(!(INTEL_DEBUG & DEBUG_NO16) || use_rep_send)) {
> if (!v.simd16_unsupported) {
> /* Try a SIMD16 compile */
> v2.import_uniforms(&v);
> - if (!v2.run_fs(brw->use_rep_send)) {
> - perf_debug("SIMD16 shader failed to compile: %s", v2.fail_msg);
> + if (!v2.run_fs(use_rep_send)) {
> + compiler->shader_perf_log(log_data,
> + "SIMD16 shader failed to compile: %s",
> + v2.fail_msg);
> } else {
> simd16_cfg = v2.cfg;
> }
> @@ -5156,8 +5155,8 @@ brw_wm_fs_emit(struct brw_context *brw,
> }
>
> cfg_t *simd8_cfg;
> - int no_simd8 = (INTEL_DEBUG & DEBUG_NO8) || brw->no_simd8;
> - if ((no_simd8 || brw->gen < 5) && simd16_cfg) {
> + int no_simd8 = (INTEL_DEBUG & DEBUG_NO8) || use_rep_send;
> + if ((no_simd8 || compiler->devinfo->gen < 5) && simd16_cfg) {
> simd8_cfg = NULL;
> prog_data->no_8 = true;
> } else {
> @@ -5165,20 +5164,14 @@ brw_wm_fs_emit(struct brw_context *brw,
> prog_data->no_8 = false;
> }
>
> - fs_generator g(brw->intelScreen->compiler, brw,
> - mem_ctx, (void *) key, &prog_data->base,
> + fs_generator g(compiler, log_data, mem_ctx, (void *) key, &prog_data->base,
> v.promoted_constants, v.runtime_check_aads_emit, "FS");
>
> if (unlikely(INTEL_DEBUG & DEBUG_WM)) {
> - char *name;
> - if (prog)
> - name = ralloc_asprintf(mem_ctx, "%s fragment shader %d",
> - prog->Label ? prog->Label : "unnamed",
> - prog->Name);
> - else
> - name = ralloc_asprintf(mem_ctx, "fragment program %d", fp->Base.Id);
> -
> - g.enable_debug(name);
> + g.enable_debug(ralloc_asprintf(mem_ctx, "%s fragment shader %s",
> + shader->info.label ? shader->info.label :
> + "unnamed",
> + shader->info.name));
> }
>
> if (simd8_cfg)
> diff --git a/src/mesa/drivers/dri/i965/brw_wm.c b/src/mesa/drivers/dri/i965/brw_wm.c
> index 4d5e7f6..ab9461a 100644
> --- a/src/mesa/drivers/dri/i965/brw_wm.c
> +++ b/src/mesa/drivers/dri/i965/brw_wm.c
> @@ -230,9 +230,19 @@ brw_codegen_wm_prog(struct brw_context *brw,
> st_index16 = brw_get_shader_time_index(brw, prog, &fp->program.Base, ST_FS16);
> }
>
> - program = brw_wm_fs_emit(brw, mem_ctx, key, &prog_data,
> - &fp->program, prog, st_index8, st_index16, &program_size);
> + char *error_str = NULL;
> + program = brw_wm_fs_emit(brw->intelScreen->compiler, brw, mem_ctx,
> + key, &prog_data, fp->program.Base.nir,
> + &fp->program.Base, st_index8, st_index16,
> + brw->use_rep_send, &program_size, &error_str);
> if (program == NULL) {
> + if (prog) {
> + prog->LinkStatus = false;
> + ralloc_strcat(&prog->InfoLog, error_str);
> + }
> +
> + _mesa_problem(NULL, "Failed to compile fragment shader: %s\n", error_str);
> +
> ralloc_free(mem_ctx);
> return false;
> }
> diff --git a/src/mesa/drivers/dri/i965/brw_wm.h b/src/mesa/drivers/dri/i965/brw_wm.h
> index 6ee22b2..ac22bee 100644
> --- a/src/mesa/drivers/dri/i965/brw_wm.h
> +++ b/src/mesa/drivers/dri/i965/brw_wm.h
> @@ -61,20 +61,25 @@
> extern "C" {
> #endif
>
> +struct nir_shader;
> +
> /**
> * Compile a fragment shader.
> *
> * Returns the final assembly and the program's size.
> */
> -const unsigned *brw_wm_fs_emit(struct brw_context *brw,
> +const unsigned *brw_wm_fs_emit(const struct brw_compiler *compiler,
> + void *log_data,
> void *mem_ctx,
> const struct brw_wm_prog_key *key,
> struct brw_wm_prog_data *prog_data,
> - struct gl_fragment_program *fp,
> - struct gl_shader_program *prog,
> + const struct nir_shader *shader,
> + struct gl_program *prog,
> int shader_time_index8,
> int shader_time_index16,
> - unsigned *final_assembly_size);
> + bool use_rep_send,
> + unsigned *final_assembly_size,
> + char **error_str);
>
> GLboolean brw_link_shader(struct gl_context *ctx, struct gl_shader_program *prog);
> struct gl_shader *brw_new_shader(struct gl_context *ctx, GLuint name, GLuint type);
> --
> 2.5.0.400.gff86faf
>
More information about the mesa-dev
mailing list