Contents of /trunk/mesa/patches/mesa-6.5.2-i965-wine-fix.patch
Parent Directory | Revision Log
Revision 153 -
(show annotations)
(download)
Tue May 8 20:52:56 2007 UTC (17 years, 4 months ago) by niro
File size: 2888 byte(s)
Tue May 8 20:52:56 2007 UTC (17 years, 4 months ago) by niro
File size: 2888 byte(s)
-import
1 | --- a/src/mesa/drivers/dri/i965/brw_context.h |
2 | +++ b/src/mesa/drivers/dri/i965/brw_context.h |
3 | @@ -599,6 +599,7 @@ struct brw_context |
4 | |
5 | struct { |
6 | struct brw_wm_prog_data *prog_data; |
7 | + struct brw_wm_compile *compile_data; |
8 | |
9 | /* Input sizes, calculated from active vertex program: |
10 | */ |
11 | diff --git a/src/mesa/drivers/dri/i965/brw_wm.c b/src/mesa/drivers/dri/i965/brw_wm.c |
12 | index 3e2f2d0..0f842d2 100644 |
13 | --- a/src/mesa/drivers/dri/i965/brw_wm.c |
14 | +++ b/src/mesa/drivers/dri/i965/brw_wm.c |
15 | @@ -138,64 +138,75 @@ static void do_wm_prog( struct brw_conte |
16 | struct brw_fragment_program *fp, |
17 | struct brw_wm_prog_key *key) |
18 | { |
19 | - struct brw_wm_compile c; |
20 | + struct brw_wm_compile *c; |
21 | const GLuint *program; |
22 | GLuint program_size; |
23 | |
24 | - memset(&c, 0, sizeof(c)); |
25 | - memcpy(&c.key, key, sizeof(*key)); |
26 | + c = brw->wm.compile_data; |
27 | + if (c == NULL) { |
28 | + brw->wm.compile_data = calloc(1, sizeof(*brw->wm.compile_data)); |
29 | + c = brw->wm.compile_data; |
30 | + } else { |
31 | + memset(c, 0, sizeof(*brw->wm.compile_data)); |
32 | + } |
33 | + memcpy(&c->key, key, sizeof(*key)); |
34 | |
35 | - c.fp = fp; |
36 | - c.env_param = brw->intel.ctx.FragmentProgram.Parameters; |
37 | + c->fp = fp; |
38 | + c->env_param = brw->intel.ctx.FragmentProgram.Parameters; |
39 | |
40 | |
41 | /* Augment fragment program. Add instructions for pre- and |
42 | * post-fragment-program tasks such as interpolation and fogging. |
43 | */ |
44 | - brw_wm_pass_fp(&c); |
45 | + brw_wm_pass_fp(c); |
46 | |
47 | /* Translate to intermediate representation. Build register usage |
48 | * chains. |
49 | */ |
50 | - brw_wm_pass0(&c); |
51 | + brw_wm_pass0(c); |
52 | |
53 | /* Dead code removal. |
54 | */ |
55 | - brw_wm_pass1(&c); |
56 | + brw_wm_pass1(c); |
57 | |
58 | /* Hal optimization |
59 | */ |
60 | - brw_wm_pass_hal (&c); |
61 | + brw_wm_pass_hal (c); |
62 | |
63 | /* Register allocation. |
64 | */ |
65 | - c.grf_limit = BRW_WM_MAX_GRF/2; |
66 | + c->grf_limit = BRW_WM_MAX_GRF/2; |
67 | |
68 | /* This is where we start emitting gen4 code: |
69 | */ |
70 | - brw_init_compile(&c.func); |
71 | + brw_init_compile(&c->func); |
72 | |
73 | - brw_wm_pass2(&c); |
74 | + brw_wm_pass2(c); |
75 | |
76 | - c.prog_data.total_grf = c.max_wm_grf; |
77 | - c.prog_data.total_scratch = c.last_scratch ? c.last_scratch + 0x40 : 0; |
78 | + c->prog_data.total_grf = c->max_wm_grf; |
79 | + if (c->last_scratch) { |
80 | + c->prog_data.total_scratch = |
81 | + c->last_scratch + 0x40; |
82 | + } else { |
83 | + c->prog_data.total_scratch = 0; |
84 | + } |
85 | |
86 | /* Emit GEN4 code. |
87 | */ |
88 | - brw_wm_emit(&c); |
89 | + brw_wm_emit(c); |
90 | |
91 | /* get the program |
92 | */ |
93 | - program = brw_get_program(&c.func, &program_size); |
94 | + program = brw_get_program(&c->func, &program_size); |
95 | |
96 | /* |
97 | */ |
98 | brw->wm.prog_gs_offset = brw_upload_cache( &brw->cache[BRW_WM_PROG], |
99 | - &c.key, |
100 | - sizeof(c.key), |
101 | + &c->key, |
102 | + sizeof(c->key), |
103 | program, |
104 | program_size, |
105 | - &c.prog_data, |
106 | + &c->prog_data, |
107 | &brw->wm.prog_data ); |
108 | } |
109 |