[Mesa-dev] [PATCH 02/14] i965: Generalize fs_generator further
Matt Turner
mattst88 at gmail.com
Tue Oct 28 15:58:00 PDT 2014
On Tue, Oct 28, 2014 at 3:17 PM, Kristian Høgsberg <krh at bitplanet.net> wrote:
> This removes all stage specific data from the generator, and lets us
> create a generator for any stage.
>
> Signed-off-by: Kristian Høgsberg <krh at bitplanet.net>
> ---
> src/mesa/drivers/dri/i965/brw_blorp_blit_eu.cpp | 5 ++---
> src/mesa/drivers/dri/i965/brw_fs.cpp | 2 +-
> src/mesa/drivers/dri/i965/brw_fs.h | 7 +++----
> src/mesa/drivers/dri/i965/brw_fs_generator.cpp | 20 +++++++-------------
> 4 files changed, 13 insertions(+), 21 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_blorp_blit_eu.cpp b/src/mesa/drivers/dri/i965/brw_blorp_blit_eu.cpp
> index 3afe0e7..7e02781 100644
> --- a/src/mesa/drivers/dri/i965/brw_blorp_blit_eu.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_blorp_blit_eu.cpp
> @@ -29,9 +29,8 @@
> brw_blorp_eu_emitter::brw_blorp_eu_emitter(struct brw_context *brw,
> bool debug_flag)
> : mem_ctx(ralloc_context(NULL)),
> - generator(brw, mem_ctx,
> - rzalloc(mem_ctx, struct brw_wm_prog_key),
> - rzalloc(mem_ctx, struct brw_wm_prog_data),
> + generator(brw, mem_ctx, (void *) rzalloc(mem_ctx, struct brw_wm_prog_key),
> + (struct brw_stage_prog_data *) rzalloc(mem_ctx, struct brw_wm_prog_data),
> NULL, NULL, false, debug_flag)
> {
> }
> diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp
> index aa1d8d2..b3684bc 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
> @@ -3744,7 +3744,7 @@ brw_wm_fs_emit(struct brw_context *brw,
> }
>
> const unsigned *assembly = NULL;
> - fs_generator g(brw, mem_ctx, key, prog_data, prog, fp,
> + fs_generator g(brw, mem_ctx, (void *) key, &prog_data->base, prog, &fp->Base,
> v.runtime_check_aads_emit, INTEL_DEBUG & DEBUG_WM);
> assembly = g.generate_assembly(simd8_cfg, simd16_cfg,
> final_assembly_size);
> diff --git a/src/mesa/drivers/dri/i965/brw_fs.h b/src/mesa/drivers/dri/i965/brw_fs.h
> index 67956bc..3c3e0d4 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs.h
> +++ b/src/mesa/drivers/dri/i965/brw_fs.h
> @@ -694,10 +694,10 @@ class fs_generator
> public:
> fs_generator(struct brw_context *brw,
> void *mem_ctx,
> - const struct brw_wm_prog_key *key,
> - struct brw_wm_prog_data *prog_data,
> + const void *key,
> + struct brw_stage_prog_data *prog_data,
> struct gl_shader_program *shader_prog,
> - struct gl_fragment_program *fp,
> + struct gl_program *fp,
> bool runtime_check_aads_emit,
> bool debug_flag);
> ~fs_generator();
> @@ -801,7 +801,6 @@ private:
> struct gl_context *ctx;
>
> struct brw_compile *p;
> - gl_shader_stage stage;
> const void * const key;
> struct brw_stage_prog_data * const prog_data;
>
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
> index c95beb6..06b94dd 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
> @@ -38,16 +38,16 @@ extern "C" {
>
> fs_generator::fs_generator(struct brw_context *brw,
> void *mem_ctx,
> - const struct brw_wm_prog_key *key,
> - struct brw_wm_prog_data *prog_data,
> + const void *key,
> + struct brw_stage_prog_data *prog_data,
> struct gl_shader_program *shader_prog,
> - struct gl_fragment_program *fp,
> + struct gl_program *prog,
> bool runtime_check_aads_emit,
> bool debug_flag)
>
> - : brw(brw), stage(MESA_SHADER_FRAGMENT), key(key),
> - prog_data(&prog_data->base), shader_prog(shader_prog),
> - prog(&fp->Base), runtime_check_aads_emit(runtime_check_aads_emit),
> + : brw(brw), key(key),
> + prog_data(prog_data), shader_prog(shader_prog),
> + prog(prog), runtime_check_aads_emit(runtime_check_aads_emit),
> debug_flag(debug_flag), mem_ctx(mem_ctx)
> {
> ctx = &brw->ctx;
> @@ -105,7 +105,6 @@ fs_generator::fire_fb_write(fs_inst *inst,
> {
> uint32_t msg_control;
>
> - assert(stage == MESA_SHADER_FRAGMENT);
I like removing these asserts from the function bodies, but I'm
confused why you're doing it. The VS isn't going to call
fire_fb_write, or emit a derivative instruction.
In a separate clean up patch, I'd move these asserts to the
appropriate places in the switch statement (and completely remove the
useless ones from fire_fb_write, which is only called by
generate_fb_write which already has its own copy of the assert).
More information about the mesa-dev
mailing list