Rev 6523 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 6523 | Rev 8063 | ||
---|---|---|---|
Line 3... | Line 3... | ||
3 | macro ADD_OP a,b,c |
3 | macro ADD_OP a,b,c |
4 | { |
4 | { |
5 | db 'gl',`a,' ',c,0 |
5 | db 'gl',`a,' ',c,0 |
6 | } |
6 | } |
7 | include 'opinfo.inc' |
7 | include 'opinfo.inc' |
- | 8 | purge ADD_OP |
|
Line 8... | Line 9... | ||
8 | 9 | ||
- | 10 | ;указатели на функции ;static void (*op_table_func[])(GLContext *,GLParam *)= |
|
9 | ;указатели на функции ;static void (*op_table_func[])(GLContext *,GLParam *)= |
11 | align 4 |
10 | op_table_func: |
12 | op_table_func: |
11 | macro ADD_OP a,b,c |
13 | macro ADD_OP a,b,c |
12 | { |
14 | { |
13 | dd glop#a |
15 | dd glop#a |
14 | } |
16 | } |
- | 17 | include 'opinfo.inc' |
|
Line 15... | Line 18... | ||
15 | include 'opinfo.inc' |
18 | purge ADD_OP |
- | 19 | ||
16 | 20 | ;число параметров в функциях |
|
17 | ;число параметров в функциях |
21 | align 4 |
18 | op_table_size: |
22 | op_table_size: |
19 | macro ADD_OP a,b,c |
23 | macro ADD_OP a,b,c |
20 | { |
24 | { |
21 | dd b+1 |
25 | dd b+1 |
- | 26 | } |
|
- | 27 | include 'opinfo.inc' |
|
- | 28 | purge ADD_OP |
|
- | 29 | ||
- | 30 | ;коды функций у которых нет входных параметров |
|
- | 31 | align 4 |
|
- | 32 | macro ADD_OP a,b,c |
|
- | 33 | { |
|
- | 34 | if b eq 0 |
|
- | 35 | op_#a dd OP_#a |
|
- | 36 | end if |
|
- | 37 | } |
|
Line 22... | Line 38... | ||
22 | } |
38 | include 'opinfo.inc' |
23 | include 'opinfo.inc' |
39 | purge ADD_OP |
24 | 40 | ||
25 | 41 | ||
26 | ;output: |
42 | ;output: |
27 | ; eax = context.shared_state.lists[list] |
43 | ; eax = context.shared_state.lists[list] |
28 | align 4 |
44 | align 4 |
29 | proc find_list uses ebx, context:dword, list:dword |
- | |
30 | mov eax,[context] |
45 | proc find_list uses ebx, context:dword, list:dword |
31 | mov eax,[eax+GLContext.shared_state] |
46 | mov eax,[context] |
32 | mov ebx,[list] |
47 | mov eax,[eax+GLContext.shared_state] |
33 | shl ebx,2 |
48 | mov ebx,[list] |
Line 34... | Line 49... | ||
34 | add eax,ebx |
49 | lea eax,[eax+4*ebx] |
Line 53... | Line 68... | ||
53 | mov eax,ecx |
68 | mov eax,ecx |
54 | jmp @b |
69 | jmp @b |
55 | .end_w: |
70 | .end_w: |
Line 56... | Line 71... | ||
56 | 71 | ||
57 | stdcall gl_free,edx |
- | |
58 | mov ecx,[list] |
- | |
59 | shl ecx,2 |
72 | stdcall gl_free,edx |
- | 73 | mov ebx,[ebx+GLContext.shared_state] ;ebx = &context.shared_state.lists |
|
60 | mov ebx,[ebx+GLContext.shared_state] ;ebx = &context.shared_state.lists |
74 | mov ecx,[list] |
61 | add ebx,ecx |
75 | lea ebx,[ebx+4*ecx] |
62 | mov dword[ebx],0 ;=NULL |
76 | mov dword[ebx],0 ;=NULL |
63 | ret |
77 | ret |
Line 64... | Line 78... | ||
64 | endp |
78 | endp |
Line 75... | Line 89... | ||
75 | mov dword[ecx+offs_gpbu_ops],OP_EndList ;ob.ops[0].op=OP_EndList |
89 | mov dword[ecx+offs_gpbu_ops],OP_EndList ;ob.ops[0].op=OP_EndList |
Line 76... | Line 90... | ||
76 | 90 | ||
77 | mov ebx,[context] |
91 | mov ebx,[context] |
78 | mov ebx,[ebx+GLContext.shared_state] |
92 | mov ebx,[ebx+GLContext.shared_state] |
79 | mov ecx,[list] |
- | |
80 | shl ecx,2 |
93 | mov ecx,[list] |
81 | add ebx,ecx |
94 | lea ebx,[ebx+4*ecx] |
82 | mov [ebx],eax ;context.shared_state.lists[list]=l |
95 | mov [ebx],eax ;context.shared_state.lists[list]=l |
83 | ret |
96 | ret |
Line 84... | Line 97... | ||
84 | endp |
97 | endp |
Line 114... | Line 127... | ||
114 | align 4 |
127 | align 4 |
115 | proc gl_compile_op, context:dword, p:dword |
128 | proc gl_compile_op, context:dword, p:dword |
116 | pushad |
129 | pushad |
117 | mov edx,[context] |
130 | mov edx,[context] |
Line 118... | Line -... | ||
118 | - | ||
119 | lea ebx,[op_table_size] |
131 | |
120 | mov ecx,[p] |
132 | mov ecx,[p] |
121 | mov ecx,[ecx] |
- | |
122 | shl ecx,2 |
133 | mov ecx,[ecx] ;код операции |
123 | add ecx,ebx |
134 | lea ecx,[op_table_size+4*ecx] |
124 | mov ecx,[ecx] ;ecx = кол-во параметров в компилируемой функции |
135 | mov ecx,[ecx] ;ecx = кол-во параметров в компилируемой функции |
125 | mov ebx,[edx+GLContext.current_op_buffer_index] |
136 | mov ebx,[edx+GLContext.current_op_buffer_index] |
Line 126... | Line 137... | ||
126 | mov eax,[edx+GLContext.current_op_buffer] |
137 | mov eax,[edx+GLContext.current_op_buffer] |
127 | - | ||
128 | ; we should be able to add a NextBuffer opcode |
138 | |
129 | mov esi,ebx |
139 | ; we should be able to add a NextBuffer opcode |
130 | add esi,ecx |
140 | lea esi,[ebx+ecx] |
131 | cmp esi,(OP_BUFFER_MAX_SIZE-2) |
141 | cmp esi,(OP_BUFFER_MAX_SIZE-2) |
132 | jle @f |
142 | jle @f |
133 | mov edi,eax |
143 | mov edi,eax |
Line 134... | Line 144... | ||
134 | stdcall gl_zalloc,sizeof.GLParamBuffer |
144 | stdcall gl_zalloc,sizeof.GLParamBuffer |
135 | mov dword[eax+offs_gpbu_next],0 ;=NULL |
- | |
136 | - | ||
137 | mov dword[edi+offs_gpbu_next],eax |
145 | mov dword[eax+offs_gpbu_next],0 ;=NULL |
138 | mov esi,ebx |
146 | |
139 | shl esi,2 |
147 | mov dword[edi+offs_gpbu_next],eax |
Line 140... | Line 148... | ||
140 | add esi,edi |
148 | lea esi,[edi+4*ebx] |
141 | mov dword[esi+offs_gpbu_ops],OP_NextBuffer |
149 | mov dword[esi+offs_gpbu_ops],OP_NextBuffer |
142 | mov dword[esi+offs_gpbu_ops+4],eax |
150 | mov dword[esi+offs_gpbu_ops+4],eax |
Line 143... | Line 151... | ||
143 | 151 | ||
144 | mov dword[edx+GLContext.current_op_buffer],eax |
152 | mov dword[edx+GLContext.current_op_buffer],eax |
145 | xor ebx,ebx |
- | |
146 | @@: |
- | |
147 | 153 | xor ebx,ebx |
|
148 | mov esi,[p] |
154 | @@: |
149 | @@: |
155 | |
150 | mov edi,ebx |
156 | mov esi,[p] |
151 | shl edi,2 |
157 | @@: |
152 | add edi,eax |
158 | lea edi,[eax+4*ebx] |