This removes all stage specific data from the generator, and lets us create a generator for any stage.
Signed-off-by: Kristian Høgsberg <k...@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); brw_wm_prog_data *prog_data = (brw_wm_prog_data*) this->prog_data; if (brw->gen < 6) { @@ -146,7 +145,6 @@ fs_generator::fire_fb_write(fs_inst *inst, void fs_generator::generate_fb_write(fs_inst *inst, struct brw_reg payload) { - assert(stage == MESA_SHADER_FRAGMENT); brw_wm_prog_data *prog_data = (brw_wm_prog_data*) this->prog_data; const brw_wm_prog_key * const key = (brw_wm_prog_key * const) this->key; struct brw_reg implied_header; @@ -700,7 +698,6 @@ fs_generator::generate_ddx(fs_inst *inst, struct brw_reg dst, struct brw_reg src assert(quality.file == BRW_IMMEDIATE_VALUE); assert(quality.type == BRW_REGISTER_TYPE_D); - assert(stage == MESA_SHADER_FRAGMENT); const brw_wm_prog_key * const key = (brw_wm_prog_key * const) this->key; int quality_value = quality.dw1.d; @@ -743,7 +740,6 @@ fs_generator::generate_ddy(fs_inst *inst, struct brw_reg dst, struct brw_reg src assert(quality.file == BRW_IMMEDIATE_VALUE); assert(quality.type == BRW_REGISTER_TYPE_D); - assert(stage == MESA_SHADER_FRAGMENT); const brw_wm_prog_key * const key = (brw_wm_prog_key * const) this->key; int quality_value = quality.dw1.d; @@ -1853,8 +1849,7 @@ fs_generator::generate_code(const cfg_t *cfg) /* Make sure fp->UsesDFdy flag got set (otherwise there's no * guarantee that key->render_to_fbo is set). */ - assert(stage == MESA_SHADER_FRAGMENT && - ((gl_fragment_program *) prog)->UsesDFdy); + assert(((gl_fragment_program *) prog)->UsesDFdy); generate_ddy(inst, dst, src[0], src[1], ((brw_wm_prog_key * const) this->key)->render_to_fbo); break; @@ -2044,7 +2039,6 @@ fs_generator::generate_assembly(const cfg_t *simd8_cfg, brw_NOP(p); } - assert(stage == MESA_SHADER_FRAGMENT); brw_wm_prog_data *prog_data = (brw_wm_prog_data*) this->prog_data; /* Save off the start of this SIMD16 program */ -- 2.1.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev