summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Baergen <joshuabaergen@gentoo.org>2007-02-19 22:21:17 +0000
committerJoshua Baergen <joshuabaergen@gentoo.org>2007-02-19 22:21:17 +0000
commit2f29bd961a245e01804da26788a1a8b8e21e61f4 (patch)
tree9af46baf1e99ede9436e96550b5264af1d7333d4 /media-libs/mesa/files/6.5.2-i965-wine-fix.patch
parentfix date (diff)
downloadgentoo-2-2f29bd961a245e01804da26788a1a8b8e21e61f4.tar.gz
gentoo-2-2f29bd961a245e01804da26788a1a8b8e21e61f4.tar.bz2
gentoo-2-2f29bd961a245e01804da26788a1a8b8e21e61f4.zip
Fix 3D apps running in Wine. (Bug #163973, riku)
(Portage version: 2.1.2-r9)
Diffstat (limited to 'media-libs/mesa/files/6.5.2-i965-wine-fix.patch')
-rw-r--r--media-libs/mesa/files/6.5.2-i965-wine-fix.patch109
1 files changed, 109 insertions, 0 deletions
diff --git a/media-libs/mesa/files/6.5.2-i965-wine-fix.patch b/media-libs/mesa/files/6.5.2-i965-wine-fix.patch
new file mode 100644
index 000000000000..63acd15806b9
--- /dev/null
+++ b/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 );
+ }
+