diff options
Diffstat (limited to 'hardened/xorg/media-libs/mesa/files/6.5.2-i965-wine-fix.patch')
-rw-r--r-- | hardened/xorg/media-libs/mesa/files/6.5.2-i965-wine-fix.patch | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/hardened/xorg/media-libs/mesa/files/6.5.2-i965-wine-fix.patch b/hardened/xorg/media-libs/mesa/files/6.5.2-i965-wine-fix.patch new file mode 100644 index 0000000..63acd15 --- /dev/null +++ b/hardened/xorg/media-libs/mesa/files/6.5.2-i965-wine-fix.patch @@ -0,0 +1,109 @@ +--- a/src/mesa/drivers/dri/i965/brw_context.h ++++ b/src/mesa/drivers/dri/i965/brw_context.h +@@ -599,6 +599,7 @@ struct brw_context + + struct { + struct brw_wm_prog_data *prog_data; ++ struct brw_wm_compile *compile_data; + + /* Input sizes, calculated from active vertex program: + */ +diff --git a/src/mesa/drivers/dri/i965/brw_wm.c b/src/mesa/drivers/dri/i965/brw_wm.c +index 3e2f2d0..0f842d2 100644 +--- a/src/mesa/drivers/dri/i965/brw_wm.c ++++ b/src/mesa/drivers/dri/i965/brw_wm.c +@@ -138,64 +138,75 @@ static void do_wm_prog( struct brw_conte + struct brw_fragment_program *fp, + struct brw_wm_prog_key *key) + { +- struct brw_wm_compile c; ++ struct brw_wm_compile *c; + const GLuint *program; + GLuint program_size; + +- memset(&c, 0, sizeof(c)); +- memcpy(&c.key, key, sizeof(*key)); ++ c = brw->wm.compile_data; ++ if (c == NULL) { ++ brw->wm.compile_data = calloc(1, sizeof(*brw->wm.compile_data)); ++ c = brw->wm.compile_data; ++ } else { ++ memset(c, 0, sizeof(*brw->wm.compile_data)); ++ } ++ memcpy(&c->key, key, sizeof(*key)); + +- c.fp = fp; +- c.env_param = brw->intel.ctx.FragmentProgram.Parameters; ++ c->fp = fp; ++ c->env_param = brw->intel.ctx.FragmentProgram.Parameters; + + + /* Augment fragment program. Add instructions for pre- and + * post-fragment-program tasks such as interpolation and fogging. + */ +- brw_wm_pass_fp(&c); ++ brw_wm_pass_fp(c); + + /* Translate to intermediate representation. Build register usage + * chains. + */ +- brw_wm_pass0(&c); ++ brw_wm_pass0(c); + + /* Dead code removal. + */ +- brw_wm_pass1(&c); ++ brw_wm_pass1(c); + + /* Hal optimization + */ +- brw_wm_pass_hal (&c); ++ brw_wm_pass_hal (c); + + /* Register allocation. + */ +- c.grf_limit = BRW_WM_MAX_GRF/2; ++ c->grf_limit = BRW_WM_MAX_GRF/2; + + /* This is where we start emitting gen4 code: + */ +- brw_init_compile(&c.func); ++ brw_init_compile(&c->func); + +- brw_wm_pass2(&c); ++ brw_wm_pass2(c); + +- c.prog_data.total_grf = c.max_wm_grf; +- c.prog_data.total_scratch = c.last_scratch ? c.last_scratch + 0x40 : 0; ++ c->prog_data.total_grf = c->max_wm_grf; ++ if (c->last_scratch) { ++ c->prog_data.total_scratch = ++ c->last_scratch + 0x40; ++ } else { ++ c->prog_data.total_scratch = 0; ++ } + + /* Emit GEN4 code. + */ +- brw_wm_emit(&c); ++ brw_wm_emit(c); + + /* get the program + */ +- program = brw_get_program(&c.func, &program_size); ++ program = brw_get_program(&c->func, &program_size); + + /* + */ + brw->wm.prog_gs_offset = brw_upload_cache( &brw->cache[BRW_WM_PROG], +- &c.key, +- sizeof(c.key), ++ &c->key, ++ sizeof(c->key), + program, + program_size, +- &c.prog_data, ++ &c->prog_data, + &brw->wm.prog_data ); + } + |