author | Ryan C. Gordon <icculus@icculus.org> |
Wed, 17 Apr 2013 23:30:10 -0400 | |
changeset 1128 | a66416e507d1 |
parent 1104 | 9147482e1ec7 |
child 1150 | 02c0f0afb39a |
permissions | -rw-r--r-- |
1019
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
1 |
/** |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
2 |
* MojoShader; generate shader programs from bytecode of compiled |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
3 |
* Direct3D shaders. |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
4 |
* |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
5 |
* Please see the file LICENSE.txt in the source's root directory. |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
6 |
* |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
7 |
* This file written by Ryan C. Gordon. |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
8 |
*/ |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
9 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
10 |
#define __MOJOSHADER_INTERNAL__ 1 |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
11 |
#include "mojoshader_internal.h" |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
12 |
|
1036
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
13 |
#include <math.h> |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
14 |
|
1038
9b23f9a8aa31
Allow preshader support to be #ifdef'd out, to reduce binary size.
Ryan C. Gordon <icculus@icculus.org>
parents:
1037
diff
changeset
|
15 |
#if SUPPORT_PRESHADERS |
9b23f9a8aa31
Allow preshader support to be #ifdef'd out, to reduce binary size.
Ryan C. Gordon <icculus@icculus.org>
parents:
1037
diff
changeset
|
16 |
void MOJOSHADER_runPreshader(const MOJOSHADER_preshader *preshader, |
1043
6227066350b4
Preshader input registers are separate from the actual shader constant file!
Ryan C. Gordon <icculus@icculus.org>
parents:
1041
diff
changeset
|
17 |
const float *inregs, float *outregs) |
1036
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
18 |
{ |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
19 |
// this is fairly straightforward, as there aren't any branching |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
20 |
// opcodes in the preshader instruction set (at the moment, at least). |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
21 |
const int scalarstart = (int) MOJOSHADER_PRESHADEROP_SCALAR_OPS; |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
22 |
|
1047
6b92ce2fc809
Don't try to allocate a temp array if the preshader has no temps.
Ryan C. Gordon <icculus@icculus.org>
parents:
1046
diff
changeset
|
23 |
double *temps = NULL; |
6b92ce2fc809
Don't try to allocate a temp array if the preshader has no temps.
Ryan C. Gordon <icculus@icculus.org>
parents:
1046
diff
changeset
|
24 |
if (preshader->temp_count > 0) |
6b92ce2fc809
Don't try to allocate a temp array if the preshader has no temps.
Ryan C. Gordon <icculus@icculus.org>
parents:
1046
diff
changeset
|
25 |
{ |
6b92ce2fc809
Don't try to allocate a temp array if the preshader has no temps.
Ryan C. Gordon <icculus@icculus.org>
parents:
1046
diff
changeset
|
26 |
temps = (double *) alloca(sizeof (double) * preshader->temp_count); |
6b92ce2fc809
Don't try to allocate a temp array if the preshader has no temps.
Ryan C. Gordon <icculus@icculus.org>
parents:
1046
diff
changeset
|
27 |
memset(temps, '\0', sizeof (double) * preshader->temp_count); |
6b92ce2fc809
Don't try to allocate a temp array if the preshader has no temps.
Ryan C. Gordon <icculus@icculus.org>
parents:
1046
diff
changeset
|
28 |
} // if |
1036
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
29 |
|
1063
b10281d6eb45
Several preshader fixes and static analysis tweaks.
Ryan C. Gordon <icculus@icculus.org>
parents:
1053
diff
changeset
|
30 |
double dst[4] = { 0, 0, 0, 0 }; |
b10281d6eb45
Several preshader fixes and static analysis tweaks.
Ryan C. Gordon <icculus@icculus.org>
parents:
1053
diff
changeset
|
31 |
double src[3][4] = { { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 } }; |
b10281d6eb45
Several preshader fixes and static analysis tweaks.
Ryan C. Gordon <icculus@icculus.org>
parents:
1053
diff
changeset
|
32 |
const double *src0 = &src[0][0]; |
b10281d6eb45
Several preshader fixes and static analysis tweaks.
Ryan C. Gordon <icculus@icculus.org>
parents:
1053
diff
changeset
|
33 |
const double *src1 = &src[1][0]; |
b10281d6eb45
Several preshader fixes and static analysis tweaks.
Ryan C. Gordon <icculus@icculus.org>
parents:
1053
diff
changeset
|
34 |
const double *src2 = &src[2][0]; |
1036
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
35 |
|
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
36 |
MOJOSHADER_preshaderInstruction *inst = preshader->instructions; |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
37 |
int instit; |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
38 |
|
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
39 |
for (instit = 0; instit < preshader->instruction_count; instit++, inst++) |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
40 |
{ |
1046
097aefb03885
Place preshader destination register last in operand list.
Ryan C. Gordon <icculus@icculus.org>
parents:
1045
diff
changeset
|
41 |
const MOJOSHADER_preshaderOperand *operand = inst->operands; |
1036
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
42 |
const int elems = inst->element_count; |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
43 |
const int elemsbytes = sizeof (double) * elems; |
1053
513af64373ad
Maybe fix scalar operations in preshader interpreter.
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
44 |
const int isscalarop = (inst->opcode >= scalarstart); |
1036
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
45 |
|
1063
b10281d6eb45
Several preshader fixes and static analysis tweaks.
Ryan C. Gordon <icculus@icculus.org>
parents:
1053
diff
changeset
|
46 |
assert(elems >= 0); |
b10281d6eb45
Several preshader fixes and static analysis tweaks.
Ryan C. Gordon <icculus@icculus.org>
parents:
1053
diff
changeset
|
47 |
assert(elems <= 4); |
b10281d6eb45
Several preshader fixes and static analysis tweaks.
Ryan C. Gordon <icculus@icculus.org>
parents:
1053
diff
changeset
|
48 |
|
1036
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
49 |
// load up our operands... |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
50 |
int opiter, elemiter; |
1046
097aefb03885
Place preshader destination register last in operand list.
Ryan C. Gordon <icculus@icculus.org>
parents:
1045
diff
changeset
|
51 |
for (opiter = 0; opiter < inst->operand_count-1; opiter++, operand++) |
1036
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
52 |
{ |
1053
513af64373ad
Maybe fix scalar operations in preshader interpreter.
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
53 |
const int isscalar = ((isscalarop) && (opiter == 0)); |
1036
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
54 |
const unsigned int index = operand->index; |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
55 |
switch (operand->type) |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
56 |
{ |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
57 |
case MOJOSHADER_PRESHADEROPERAND_LITERAL: |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
58 |
{ |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
59 |
const double *lit = &preshader->literals[index]; |
1063
b10281d6eb45
Several preshader fixes and static analysis tweaks.
Ryan C. Gordon <icculus@icculus.org>
parents:
1053
diff
changeset
|
60 |
assert((index + elems) <= preshader->literal_count); |
1036
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
61 |
if (!isscalar) |
1063
b10281d6eb45
Several preshader fixes and static analysis tweaks.
Ryan C. Gordon <icculus@icculus.org>
parents:
1053
diff
changeset
|
62 |
memcpy(&src[opiter][0], lit, elemsbytes); |
1036
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
63 |
else |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
64 |
{ |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
65 |
const double val = *lit; |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
66 |
for (elemiter = 0; elemiter < elems; elemiter++) |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
67 |
src[opiter][elemiter] = val; |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
68 |
} // else |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
69 |
break; |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
70 |
} // case |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
71 |
|
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
72 |
case MOJOSHADER_PRESHADEROPERAND_INPUT: |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
73 |
if (isscalar) |
1043
6227066350b4
Preshader input registers are separate from the actual shader constant file!
Ryan C. Gordon <icculus@icculus.org>
parents:
1041
diff
changeset
|
74 |
src[opiter][0] = inregs[index]; |
1036
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
75 |
else |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
76 |
{ |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
77 |
int cpy; |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
78 |
for (cpy = 0; cpy < elems; cpy++) |
1043
6227066350b4
Preshader input registers are separate from the actual shader constant file!
Ryan C. Gordon <icculus@icculus.org>
parents:
1041
diff
changeset
|
79 |
src[opiter][cpy] = inregs[index+cpy]; |
6227066350b4
Preshader input registers are separate from the actual shader constant file!
Ryan C. Gordon <icculus@icculus.org>
parents:
1041
diff
changeset
|
80 |
} // else |
6227066350b4
Preshader input registers are separate from the actual shader constant file!
Ryan C. Gordon <icculus@icculus.org>
parents:
1041
diff
changeset
|
81 |
break; |
6227066350b4
Preshader input registers are separate from the actual shader constant file!
Ryan C. Gordon <icculus@icculus.org>
parents:
1041
diff
changeset
|
82 |
|
6227066350b4
Preshader input registers are separate from the actual shader constant file!
Ryan C. Gordon <icculus@icculus.org>
parents:
1041
diff
changeset
|
83 |
case MOJOSHADER_PRESHADEROPERAND_OUTPUT: |
6227066350b4
Preshader input registers are separate from the actual shader constant file!
Ryan C. Gordon <icculus@icculus.org>
parents:
1041
diff
changeset
|
84 |
if (isscalar) |
6227066350b4
Preshader input registers are separate from the actual shader constant file!
Ryan C. Gordon <icculus@icculus.org>
parents:
1041
diff
changeset
|
85 |
src[opiter][0] = outregs[index]; |
6227066350b4
Preshader input registers are separate from the actual shader constant file!
Ryan C. Gordon <icculus@icculus.org>
parents:
1041
diff
changeset
|
86 |
else |
6227066350b4
Preshader input registers are separate from the actual shader constant file!
Ryan C. Gordon <icculus@icculus.org>
parents:
1041
diff
changeset
|
87 |
{ |
6227066350b4
Preshader input registers are separate from the actual shader constant file!
Ryan C. Gordon <icculus@icculus.org>
parents:
1041
diff
changeset
|
88 |
int cpy; |
6227066350b4
Preshader input registers are separate from the actual shader constant file!
Ryan C. Gordon <icculus@icculus.org>
parents:
1041
diff
changeset
|
89 |
for (cpy = 0; cpy < elems; cpy++) |
6227066350b4
Preshader input registers are separate from the actual shader constant file!
Ryan C. Gordon <icculus@icculus.org>
parents:
1041
diff
changeset
|
90 |
src[opiter][cpy] = outregs[index+cpy]; |
1036
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
91 |
} // else |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
92 |
break; |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
93 |
|
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
94 |
case MOJOSHADER_PRESHADEROPERAND_TEMP: |
1063
b10281d6eb45
Several preshader fixes and static analysis tweaks.
Ryan C. Gordon <icculus@icculus.org>
parents:
1053
diff
changeset
|
95 |
if (temps != NULL) |
b10281d6eb45
Several preshader fixes and static analysis tweaks.
Ryan C. Gordon <icculus@icculus.org>
parents:
1053
diff
changeset
|
96 |
{ |
b10281d6eb45
Several preshader fixes and static analysis tweaks.
Ryan C. Gordon <icculus@icculus.org>
parents:
1053
diff
changeset
|
97 |
if (isscalar) |
b10281d6eb45
Several preshader fixes and static analysis tweaks.
Ryan C. Gordon <icculus@icculus.org>
parents:
1053
diff
changeset
|
98 |
src[opiter][0] = temps[index]; |
b10281d6eb45
Several preshader fixes and static analysis tweaks.
Ryan C. Gordon <icculus@icculus.org>
parents:
1053
diff
changeset
|
99 |
else |
b10281d6eb45
Several preshader fixes and static analysis tweaks.
Ryan C. Gordon <icculus@icculus.org>
parents:
1053
diff
changeset
|
100 |
memcpy(src[opiter], temps + index, elemsbytes); |
b10281d6eb45
Several preshader fixes and static analysis tweaks.
Ryan C. Gordon <icculus@icculus.org>
parents:
1053
diff
changeset
|
101 |
} // if |
1036
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
102 |
break; |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
103 |
|
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
104 |
default: |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
105 |
assert(0 && "unexpected preshader operand type."); |
1063
b10281d6eb45
Several preshader fixes and static analysis tweaks.
Ryan C. Gordon <icculus@icculus.org>
parents:
1053
diff
changeset
|
106 |
return; |
1036
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
107 |
} // switch |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
108 |
} // for |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
109 |
|
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
110 |
// run the actual instruction, store result to dst. |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
111 |
int i; |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
112 |
switch (inst->opcode) |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
113 |
{ |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
114 |
#define OPCODE_CASE(op, val) \ |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
115 |
case MOJOSHADER_PRESHADEROP_##op: \ |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
116 |
for (i = 0; i < elems; i++) { dst[i] = val; } \ |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
117 |
break; |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
118 |
|
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
119 |
//OPCODE_CASE(NOP, 0.0) // not a real instruction. |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
120 |
OPCODE_CASE(MOV, src0[i]) |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
121 |
OPCODE_CASE(NEG, -src0[i]) |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
122 |
OPCODE_CASE(RCP, 1.0 / src0[i]) |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
123 |
OPCODE_CASE(FRC, src0[i] - floor(src0[i])) |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
124 |
OPCODE_CASE(EXP, exp(src0[i])) |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
125 |
OPCODE_CASE(LOG, log(src0[i])) |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
126 |
OPCODE_CASE(RSQ, 1.0 / sqrt(src0[i])) |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
127 |
OPCODE_CASE(SIN, sin(src0[i])) |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
128 |
OPCODE_CASE(COS, cos(src0[i])) |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
129 |
OPCODE_CASE(ASIN, asin(src0[i])) |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
130 |
OPCODE_CASE(ACOS, acos(src0[i])) |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
131 |
OPCODE_CASE(ATAN, atan(src0[i])) |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
132 |
OPCODE_CASE(MIN, (src0[i] < src1[i]) ? src0[i] : src1[i]) |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
133 |
OPCODE_CASE(MAX, (src0[i] > src1[i]) ? src0[i] : src1[i]) |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
134 |
OPCODE_CASE(LT, (src0[i] < src1[i]) ? 1.0 : 0.0) |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
135 |
OPCODE_CASE(GE, (src0[i] >= src1[i]) ? 1.0 : 0.0) |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
136 |
OPCODE_CASE(ADD, src0[i] + src1[i]) |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
137 |
OPCODE_CASE(MUL, src0[i] * src1[i]) |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
138 |
OPCODE_CASE(ATAN2, atan2(src0[i], src1[i])) |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
139 |
OPCODE_CASE(DIV, src0[i] / src1[i]) |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
140 |
OPCODE_CASE(CMP, (src0[i] >= 0.0) ? src1[i] : src2[i]) |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
141 |
//OPCODE_CASE(NOISE, ???) // !!! FIXME: don't know what this does |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
142 |
//OPCODE_CASE(MOVC, ???) // !!! FIXME: don't know what this does |
1074
3fdc7cbd0c37
Corrected scalar opcode behavior in the preshader virtual machine.
Ryan C. Gordon <icculus@icculus.org>
parents:
1063
diff
changeset
|
143 |
OPCODE_CASE(MIN_SCALAR, (src0[0] < src1[i]) ? src0[0] : src1[i]) |
3fdc7cbd0c37
Corrected scalar opcode behavior in the preshader virtual machine.
Ryan C. Gordon <icculus@icculus.org>
parents:
1063
diff
changeset
|
144 |
OPCODE_CASE(MAX_SCALAR, (src0[0] > src1[i]) ? src0[0] : src1[i]) |
3fdc7cbd0c37
Corrected scalar opcode behavior in the preshader virtual machine.
Ryan C. Gordon <icculus@icculus.org>
parents:
1063
diff
changeset
|
145 |
OPCODE_CASE(LT_SCALAR, (src0[0] < src1[i]) ? 1.0 : 0.0) |
3fdc7cbd0c37
Corrected scalar opcode behavior in the preshader virtual machine.
Ryan C. Gordon <icculus@icculus.org>
parents:
1063
diff
changeset
|
146 |
OPCODE_CASE(GE_SCALAR, (src0[0] >= src1[i]) ? 1.0 : 0.0) |
3fdc7cbd0c37
Corrected scalar opcode behavior in the preshader virtual machine.
Ryan C. Gordon <icculus@icculus.org>
parents:
1063
diff
changeset
|
147 |
OPCODE_CASE(ADD_SCALAR, src0[0] + src1[i]) |
3fdc7cbd0c37
Corrected scalar opcode behavior in the preshader virtual machine.
Ryan C. Gordon <icculus@icculus.org>
parents:
1063
diff
changeset
|
148 |
OPCODE_CASE(MUL_SCALAR, src0[0] * src1[i]) |
3fdc7cbd0c37
Corrected scalar opcode behavior in the preshader virtual machine.
Ryan C. Gordon <icculus@icculus.org>
parents:
1063
diff
changeset
|
149 |
OPCODE_CASE(ATAN2_SCALAR, atan2(src0[0], src1[i])) |
3fdc7cbd0c37
Corrected scalar opcode behavior in the preshader virtual machine.
Ryan C. Gordon <icculus@icculus.org>
parents:
1063
diff
changeset
|
150 |
OPCODE_CASE(DIV_SCALAR, src0[0] / src1[i]) |
3fdc7cbd0c37
Corrected scalar opcode behavior in the preshader virtual machine.
Ryan C. Gordon <icculus@icculus.org>
parents:
1063
diff
changeset
|
151 |
//OPCODE_CASE(DOT_SCALAR) // !!! FIXME: isn't this just a MUL? |
3fdc7cbd0c37
Corrected scalar opcode behavior in the preshader virtual machine.
Ryan C. Gordon <icculus@icculus.org>
parents:
1063
diff
changeset
|
152 |
//OPCODE_CASE(NOISE_SCALAR, ???) // !!! FIXME: ? |
1036
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
153 |
#undef OPCODE_CASE |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
154 |
|
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
155 |
case MOJOSHADER_PRESHADEROP_DOT: |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
156 |
{ |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
157 |
double final = 0.0; |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
158 |
for (i = 0; i < elems; i++) |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
159 |
final += src0[i] * src1[i]; |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
160 |
for (i = 0; i < elems; i++) |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
161 |
dst[i] = final; // !!! FIXME: is this right? |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
162 |
} // case |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
163 |
|
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
164 |
default: |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
165 |
assert(0 && "Unhandled preshader opcode!"); |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
166 |
break; |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
167 |
} // switch |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
168 |
|
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
169 |
// Figure out where dst wants to be stored. |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
170 |
if (operand->type == MOJOSHADER_PRESHADEROPERAND_TEMP) |
1063
b10281d6eb45
Several preshader fixes and static analysis tweaks.
Ryan C. Gordon <icculus@icculus.org>
parents:
1053
diff
changeset
|
171 |
{ |
b10281d6eb45
Several preshader fixes and static analysis tweaks.
Ryan C. Gordon <icculus@icculus.org>
parents:
1053
diff
changeset
|
172 |
assert(preshader->temp_count >= |
b10281d6eb45
Several preshader fixes and static analysis tweaks.
Ryan C. Gordon <icculus@icculus.org>
parents:
1053
diff
changeset
|
173 |
operand->index + (elemsbytes / sizeof (double))); |
1036
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
174 |
memcpy(temps + operand->index, dst, elemsbytes); |
1063
b10281d6eb45
Several preshader fixes and static analysis tweaks.
Ryan C. Gordon <icculus@icculus.org>
parents:
1053
diff
changeset
|
175 |
} // if |
1036
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
176 |
else |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
177 |
{ |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
178 |
assert(operand->type == MOJOSHADER_PRESHADEROPERAND_OUTPUT); |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
179 |
for (i = 0; i < elems; i++) |
1043
6227066350b4
Preshader input registers are separate from the actual shader constant file!
Ryan C. Gordon <icculus@icculus.org>
parents:
1041
diff
changeset
|
180 |
outregs[operand->index + i] = (float) dst[i]; |
1036
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
181 |
} // else |
8a3597b44ff7
First shot at preshader interpreter. Completely untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
1021
diff
changeset
|
182 |
} // for |
1038
9b23f9a8aa31
Allow preshader support to be #ifdef'd out, to reduce binary size.
Ryan C. Gordon <icculus@icculus.org>
parents:
1037
diff
changeset
|
183 |
} // MOJOSHADER_runPreshader |
9b23f9a8aa31
Allow preshader support to be #ifdef'd out, to reduce binary size.
Ryan C. Gordon <icculus@icculus.org>
parents:
1037
diff
changeset
|
184 |
#endif |
1019
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
185 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
186 |
static MOJOSHADER_effect MOJOSHADER_out_of_mem_effect = { |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
187 |
1, &MOJOSHADER_out_of_mem_error, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
188 |
}; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
189 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
190 |
static uint32 readui32(const uint8 **_ptr, uint32 *_len) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
191 |
{ |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
192 |
uint32 retval = 0; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
193 |
if (*_len < sizeof (retval)) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
194 |
*_len = 0; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
195 |
else |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
196 |
{ |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
197 |
const uint32 *ptr = (const uint32 *) *_ptr; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
198 |
retval = SWAP32(*ptr); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
199 |
*_ptr += sizeof (retval); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
200 |
*_len -= sizeof (retval); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
201 |
} // else |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
202 |
return retval; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
203 |
} // readui32 |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
204 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
205 |
// !!! FIXME: this is sort of a big, ugly function. |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
206 |
const MOJOSHADER_effect *MOJOSHADER_parseEffect(const char *profile, |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
207 |
const unsigned char *buf, |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
208 |
const unsigned int _len, |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
209 |
const MOJOSHADER_swizzle *swiz, |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
210 |
const unsigned int swizcount, |
1104
9147482e1ec7
Allow sampler type remapping.
Ryan C. Gordon <icculus@icculus.org>
parents:
1074
diff
changeset
|
211 |
const MOJOSHADER_samplerMap *smap, |
9147482e1ec7
Allow sampler type remapping.
Ryan C. Gordon <icculus@icculus.org>
parents:
1074
diff
changeset
|
212 |
const unsigned int smapcount, |
1019
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
213 |
MOJOSHADER_malloc m, |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
214 |
MOJOSHADER_free f, |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
215 |
void *d) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
216 |
{ |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
217 |
if ( ((m == NULL) && (f != NULL)) || ((m != NULL) && (f == NULL)) ) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
218 |
return &MOJOSHADER_out_of_mem_effect; // supply both or neither. |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
219 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
220 |
if (m == NULL) m = MOJOSHADER_internal_malloc; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
221 |
if (f == NULL) f = MOJOSHADER_internal_free; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
222 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
223 |
MOJOSHADER_effect *retval = m(sizeof (MOJOSHADER_effect), d); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
224 |
if (retval == NULL) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
225 |
return &MOJOSHADER_out_of_mem_effect; // supply both or neither. |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
226 |
memset(retval, '\0', sizeof (*retval)); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
227 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
228 |
retval->malloc = m; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
229 |
retval->free = f; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
230 |
retval->malloc_data = d; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
231 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
232 |
const uint8 *ptr = (const uint8 *) buf; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
233 |
uint32 len = (uint32) _len; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
234 |
size_t siz = 0; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
235 |
int i, j, k; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
236 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
237 |
if (len < 8) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
238 |
goto parseEffect_unexpectedEOF; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
239 |
|
1037
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
240 |
const uint8 *base = NULL; |
1019
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
241 |
if (readui32(&ptr, &len) != 0xFEFF0901) // !!! FIXME: is this always magic? |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
242 |
goto parseEffect_notAnEffectsFile; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
243 |
else |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
244 |
{ |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
245 |
const uint32 offset = readui32(&ptr, &len); |
1037
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
246 |
base = ptr; |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
247 |
//printf("base offset == %u\n", offset); |
1019
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
248 |
if (offset > len) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
249 |
goto parseEffect_unexpectedEOF; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
250 |
ptr += offset; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
251 |
len -= offset; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
252 |
} // else |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
253 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
254 |
// params... |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
255 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
256 |
if (len < 16) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
257 |
goto parseEffect_unexpectedEOF; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
258 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
259 |
const uint32 numparams = readui32(&ptr, &len); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
260 |
const uint32 numtechniques = readui32(&ptr, &len); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
261 |
|
1037
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
262 |
readui32(&ptr, &len); // !!! FIXME: there are 8 unknown bytes here. Annotations? |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
263 |
/*const uint32 numobjects = */ readui32(&ptr, &len); |
1019
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
264 |
|
1037
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
265 |
if (numparams > 0) |
1019
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
266 |
{ |
1037
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
267 |
siz = sizeof (MOJOSHADER_effectParam) * numparams; |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
268 |
retval->params = (MOJOSHADER_effectParam *) m(siz, d); |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
269 |
if (retval->params == NULL) |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
270 |
goto parseEffect_outOfMemory; |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
271 |
memset(retval->params, '\0', siz); |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
272 |
|
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
273 |
retval->param_count = numparams; |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
274 |
|
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
275 |
for (i = 0; i < numparams; i++) |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
276 |
{ |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
277 |
if (len < 16) |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
278 |
goto parseEffect_unexpectedEOF; |
1019
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
279 |
|
1037
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
280 |
const uint32 typeoffset = readui32(&ptr, &len); |
1041
200cde29af83
Fixed compiler warnings.
Ryan C. Gordon <icculus@icculus.org>
parents:
1038
diff
changeset
|
281 |
/*const uint32 valoffset =*/ readui32(&ptr, &len); |
200cde29af83
Fixed compiler warnings.
Ryan C. Gordon <icculus@icculus.org>
parents:
1038
diff
changeset
|
282 |
/*const uint32 flags =*/ readui32(&ptr, &len); |
1037
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
283 |
const uint32 numannos = readui32(&ptr, &len); |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
284 |
for (j = 0; j < numannos; j++) |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
285 |
{ |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
286 |
if (len < 8) |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
287 |
goto parseEffect_unexpectedEOF; |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
288 |
// !!! FIXME: parse annotations. |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
289 |
readui32(&ptr, &len); |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
290 |
readui32(&ptr, &len); |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
291 |
} // for |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
292 |
|
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
293 |
const uint8 *typeptr = base + typeoffset; |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
294 |
unsigned int typelen = 9999999; // !!! FIXME |
1041
200cde29af83
Fixed compiler warnings.
Ryan C. Gordon <icculus@icculus.org>
parents:
1038
diff
changeset
|
295 |
/*const uint32 paramtype =*/ readui32(&typeptr, &typelen); |
200cde29af83
Fixed compiler warnings.
Ryan C. Gordon <icculus@icculus.org>
parents:
1038
diff
changeset
|
296 |
/*const uint32 paramclass =*/ readui32(&typeptr, &typelen); |
1037
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
297 |
const uint32 paramname = readui32(&typeptr, &typelen); |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
298 |
const uint32 paramsemantic = readui32(&typeptr, &typelen); |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
299 |
|
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
300 |
// !!! FIXME: sanity checks! |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
301 |
const char *namestr = ((const char *) base) + paramname; |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
302 |
const char *semstr = ((const char *) base) + paramsemantic; |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
303 |
uint32 len; |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
304 |
char *strptr; |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
305 |
len = *((const uint32 *) namestr); |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
306 |
strptr = (char *) m(len + 1, d); |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
307 |
memcpy(strptr, namestr + 4, len); |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
308 |
strptr[len] = '\0'; |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
309 |
retval->params[i].name = strptr; |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
310 |
len = *((const uint32 *) semstr); |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
311 |
strptr = (char *) m(len + 1, d); |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
312 |
memcpy(strptr, semstr + 4, len); |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
313 |
strptr[len] = '\0'; |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
314 |
retval->params[i].semantic = strptr; |
1019
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
315 |
} // for |
1037
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
316 |
} // if |
1019
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
317 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
318 |
uint32 numshaders = 0; // we'll calculate this later. |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
319 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
320 |
// techniques... |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
321 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
322 |
if (numtechniques > 0) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
323 |
{ |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
324 |
siz = sizeof (MOJOSHADER_effectTechnique) * numtechniques; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
325 |
retval->techniques = (MOJOSHADER_effectTechnique *) m(siz, d); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
326 |
if (retval->techniques == NULL) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
327 |
goto parseEffect_outOfMemory; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
328 |
memset(retval->techniques, '\0', siz); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
329 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
330 |
retval->technique_count = numtechniques; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
331 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
332 |
for (i = 0; i < numtechniques; i++) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
333 |
{ |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
334 |
if (len < 12) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
335 |
goto parseEffect_unexpectedEOF; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
336 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
337 |
MOJOSHADER_effectTechnique *technique = &retval->techniques[i]; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
338 |
|
1037
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
339 |
const uint32 nameoffset = readui32(&ptr, &len); |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
340 |
const uint32 numannos = readui32(&ptr, &len); |
1019
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
341 |
const uint32 numpasses = readui32(&ptr, &len); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
342 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
343 |
if (nameoffset >= _len) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
344 |
goto parseEffect_unexpectedEOF; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
345 |
|
1037
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
346 |
if (numannos > 0) |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
347 |
{ |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
348 |
// !!! FIXME: expose these to the caller? |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
349 |
for (j = 0; j < numannos; j++) |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
350 |
{ |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
351 |
if (len < 8) |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
352 |
goto parseEffect_unexpectedEOF; |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
353 |
readui32(&ptr, &len); // typedef offset |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
354 |
readui32(&ptr, &len); // value offset |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
355 |
} // for |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
356 |
} // if |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
357 |
|
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
358 |
// !!! FIXME: verify this doesn't go past EOF looking for a null. |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
359 |
{ |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
360 |
const char *namestr = ((char *) base) + nameoffset; |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
361 |
uint32 len = *((const uint32 *) namestr); |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
362 |
char *strptr = (char *) m(len + 1, d); |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
363 |
memcpy(strptr, namestr + 4, len); |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
364 |
strptr[len] = '\0'; |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
365 |
technique->name = strptr; |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
366 |
} |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
367 |
|
1019
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
368 |
if (numpasses > 0) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
369 |
{ |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
370 |
technique->pass_count = numpasses; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
371 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
372 |
siz = sizeof (MOJOSHADER_effectPass) * numpasses; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
373 |
technique->passes = (MOJOSHADER_effectPass *) m(siz, d); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
374 |
if (technique->passes == NULL) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
375 |
goto parseEffect_outOfMemory; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
376 |
memset(technique->passes, '\0', siz); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
377 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
378 |
for (j = 0; j < numpasses; j++) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
379 |
{ |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
380 |
if (len < 12) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
381 |
goto parseEffect_unexpectedEOF; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
382 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
383 |
MOJOSHADER_effectPass *pass = &technique->passes[j]; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
384 |
|
1037
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
385 |
const uint32 passnameoffset = readui32(&ptr, &len); |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
386 |
const uint32 numannos = readui32(&ptr, &len); |
1019
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
387 |
const uint32 numstates = readui32(&ptr, &len); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
388 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
389 |
if (passnameoffset >= _len) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
390 |
goto parseEffect_unexpectedEOF; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
391 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
392 |
// !!! FIXME: verify this doesn't go past EOF looking for a null. |
1037
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
393 |
{ |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
394 |
const char *namestr = ((char *) base) + passnameoffset; |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
395 |
uint32 len = *((const uint32 *) namestr); |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
396 |
char *strptr = (char *) m(len + 1, d); |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
397 |
memcpy(strptr, namestr + 4, len); |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
398 |
strptr[len] = '\0'; |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
399 |
pass->name = strptr; |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
400 |
} |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
401 |
|
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
402 |
if (numannos > 0) |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
403 |
{ |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
404 |
for (k = 0; k < numannos; k++) |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
405 |
{ |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
406 |
if (len < 8) |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
407 |
goto parseEffect_unexpectedEOF; |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
408 |
// !!! FIXME: do something with this. |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
409 |
readui32(&ptr, &len); |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
410 |
readui32(&ptr, &len); |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
411 |
} // for |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
412 |
} // if |
1019
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
413 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
414 |
if (numstates > 0) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
415 |
{ |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
416 |
pass->state_count = numstates; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
417 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
418 |
siz = sizeof (MOJOSHADER_effectState) * numstates; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
419 |
pass->states = (MOJOSHADER_effectState *) m(siz, d); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
420 |
if (pass->states == NULL) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
421 |
goto parseEffect_outOfMemory; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
422 |
memset(pass->states, '\0', siz); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
423 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
424 |
for (k = 0; k < numstates; k++) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
425 |
{ |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
426 |
if (len < 16) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
427 |
goto parseEffect_unexpectedEOF; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
428 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
429 |
MOJOSHADER_effectState *state = &pass->states[k]; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
430 |
const uint32 type = readui32(&ptr, &len); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
431 |
readui32(&ptr, &len); // !!! FIXME: don't know what this field does. |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
432 |
/*const uint32 offsetend = */ readui32(&ptr, &len); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
433 |
/*const uint32 offsetstart = */ readui32(&ptr, &len); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
434 |
state->type = type; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
435 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
436 |
if ((type == 0x92) || (type == 0x93)) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
437 |
numshaders++; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
438 |
} // for |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
439 |
} // if |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
440 |
} // for |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
441 |
} // if |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
442 |
} // for |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
443 |
} // if |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
444 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
445 |
// textures... |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
446 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
447 |
if (len < 8) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
448 |
goto parseEffect_unexpectedEOF; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
449 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
450 |
const int numtextures = readui32(&ptr, &len); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
451 |
const int numobjects = readui32(&ptr, &len); // !!! FIXME: "objects" for lack of a better word. |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
452 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
453 |
if (numtextures > 0) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
454 |
{ |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
455 |
siz = sizeof (MOJOSHADER_effectTexture) * numtextures; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
456 |
retval->textures = m(siz, d); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
457 |
if (retval->textures == NULL) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
458 |
goto parseEffect_outOfMemory; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
459 |
memset(retval->textures, '\0', siz); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
460 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
461 |
for (i = 0; i < numtextures; i++) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
462 |
{ |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
463 |
if (len < 8) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
464 |
goto parseEffect_unexpectedEOF; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
465 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
466 |
MOJOSHADER_effectTexture *texture = &retval->textures[i]; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
467 |
const uint32 texparam = readui32(&ptr, &len); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
468 |
const uint32 texsize = readui32(&ptr, &len); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
469 |
// apparently texsize will pad out to 32 bits. |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
470 |
const uint32 readsize = (((texsize + 3) / 4) * 4); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
471 |
if (len < readsize) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
472 |
goto parseEffect_unexpectedEOF; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
473 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
474 |
texture->param = texparam; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
475 |
char *str = m(texsize + 1, d); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
476 |
if (str == NULL) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
477 |
goto parseEffect_outOfMemory; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
478 |
memcpy(str, ptr, texsize); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
479 |
str[texsize] = '\0'; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
480 |
texture->name = str; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
481 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
482 |
ptr += readsize; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
483 |
len -= readsize; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
484 |
} // for |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
485 |
} // if |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
486 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
487 |
// shaders... |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
488 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
489 |
if (numshaders > 0) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
490 |
{ |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
491 |
siz = sizeof (MOJOSHADER_effectShader) * numshaders; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
492 |
retval->shaders = (MOJOSHADER_effectShader *) m(siz, d); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
493 |
if (retval->shaders == NULL) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
494 |
goto parseEffect_outOfMemory; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
495 |
memset(retval->shaders, '\0', siz); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
496 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
497 |
retval->shader_count = numshaders; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
498 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
499 |
// !!! FIXME: I wonder if we should pull these from offsets and not |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
500 |
// !!! FIXME: count on them all being in a line like this. |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
501 |
for (i = 0; i < numshaders; i++) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
502 |
{ |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
503 |
if (len < 24) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
504 |
goto parseEffect_unexpectedEOF; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
505 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
506 |
MOJOSHADER_effectShader *shader = &retval->shaders[i]; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
507 |
const uint32 technique = readui32(&ptr, &len); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
508 |
const uint32 pass = readui32(&ptr, &len); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
509 |
readui32(&ptr, &len); // !!! FIXME: don't know what this does. |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
510 |
readui32(&ptr, &len); // !!! FIXME: don't know what this does (vertex/pixel/geometry?) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
511 |
readui32(&ptr, &len); // !!! FIXME: don't know what this does. |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
512 |
const uint32 shadersize = readui32(&ptr, &len); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
513 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
514 |
if (len < shadersize) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
515 |
goto parseEffect_unexpectedEOF; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
516 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
517 |
shader->technique = technique; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
518 |
shader->pass = pass; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
519 |
shader->shader = MOJOSHADER_parse(profile, ptr, shadersize, |
1104
9147482e1ec7
Allow sampler type remapping.
Ryan C. Gordon <icculus@icculus.org>
parents:
1074
diff
changeset
|
520 |
swiz, swizcount, smap, smapcount, |
9147482e1ec7
Allow sampler type remapping.
Ryan C. Gordon <icculus@icculus.org>
parents:
1074
diff
changeset
|
521 |
m, f, d); |
1019
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
522 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
523 |
// !!! FIXME: check for errors. |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
524 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
525 |
ptr += shadersize; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
526 |
len -= shadersize; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
527 |
} // for |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
528 |
} // if |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
529 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
530 |
// !!! FIXME: we parse this, but don't expose the data, yet. |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
531 |
// mappings ... |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
532 |
assert(numshaders <= numobjects); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
533 |
const uint32 nummappings = numobjects - numshaders; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
534 |
if (nummappings > 0) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
535 |
{ |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
536 |
for (i = 0; i < nummappings; i++) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
537 |
{ |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
538 |
if (len < 24) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
539 |
goto parseEffect_unexpectedEOF; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
540 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
541 |
/*const uint32 magic = */ readui32(&ptr, &len); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
542 |
/*const uint32 index = */ readui32(&ptr, &len); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
543 |
readui32(&ptr, &len); // !!! FIXME: what is this field? |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
544 |
readui32(&ptr, &len); // !!! FIXME: what is this field? |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
545 |
/*const uint32 type = */ readui32(&ptr, &len); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
546 |
const uint32 mapsize = readui32(&ptr, &len); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
547 |
if (mapsize > 0) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
548 |
{ |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
549 |
const uint32 readsize = (((mapsize + 3) / 4) * 4); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
550 |
if (len < readsize) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
551 |
goto parseEffect_unexpectedEOF; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
552 |
} // if |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
553 |
} // for |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
554 |
} // if |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
555 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
556 |
retval->profile = (char *) m(strlen(profile) + 1, d); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
557 |
if (retval->profile == NULL) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
558 |
goto parseEffect_outOfMemory; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
559 |
strcpy((char *) retval->profile, profile); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
560 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
561 |
return retval; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
562 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
563 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
564 |
// !!! FIXME: do something with this. |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
565 |
parseEffect_notAnEffectsFile: |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
566 |
parseEffect_unexpectedEOF: |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
567 |
parseEffect_outOfMemory: |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
568 |
MOJOSHADER_freeEffect(retval); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
569 |
return &MOJOSHADER_out_of_mem_effect; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
570 |
} // MOJOSHADER_parseEffect |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
571 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
572 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
573 |
void MOJOSHADER_freeEffect(const MOJOSHADER_effect *_effect) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
574 |
{ |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
575 |
MOJOSHADER_effect *effect = (MOJOSHADER_effect *) _effect; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
576 |
if ((effect == NULL) || (effect == &MOJOSHADER_out_of_mem_effect)) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
577 |
return; // no-op. |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
578 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
579 |
MOJOSHADER_free f = effect->free; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
580 |
void *d = effect->malloc_data; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
581 |
int i, j; |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
582 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
583 |
for (i = 0; i < effect->error_count; i++) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
584 |
{ |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
585 |
f((void *) effect->errors[i].error, d); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
586 |
f((void *) effect->errors[i].filename, d); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
587 |
} // for |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
588 |
f((void *) effect->errors, d); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
589 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
590 |
f((void *) effect->profile, d); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
591 |
|
1037
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
592 |
for (i = 0; i < effect->param_count; i++) |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
593 |
{ |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
594 |
f((void *) effect->params[i].name, d); |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
595 |
f((void *) effect->params[i].semantic, d); |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
596 |
} // for |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
597 |
f(effect->params, d); |
b102a563d9cb
Filled in and fixed some stuff in the Effect parser.
Ryan C. Gordon <icculus@icculus.org>
parents:
1036
diff
changeset
|
598 |
|
1019
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
599 |
for (i = 0; i < effect->technique_count; i++) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
600 |
{ |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
601 |
MOJOSHADER_effectTechnique *technique = &effect->techniques[i]; |
1021
cad933999680
Fixed memory leak in MOJOSHADER_freeEffect().
Ryan C. Gordon <icculus@icculus.org>
parents:
1019
diff
changeset
|
602 |
f((void *) technique->name, d); |
1019
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
603 |
for (j = 0; j < technique->pass_count; j++) |
1021
cad933999680
Fixed memory leak in MOJOSHADER_freeEffect().
Ryan C. Gordon <icculus@icculus.org>
parents:
1019
diff
changeset
|
604 |
{ |
cad933999680
Fixed memory leak in MOJOSHADER_freeEffect().
Ryan C. Gordon <icculus@icculus.org>
parents:
1019
diff
changeset
|
605 |
f((void *) technique->passes[j].name, d); |
1019
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
606 |
f(technique->passes[j].states, d); |
1021
cad933999680
Fixed memory leak in MOJOSHADER_freeEffect().
Ryan C. Gordon <icculus@icculus.org>
parents:
1019
diff
changeset
|
607 |
} // for |
1019
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
608 |
f(technique->passes, d); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
609 |
} // for |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
610 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
611 |
f(effect->techniques, d); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
612 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
613 |
for (i = 0; i < effect->texture_count; i++) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
614 |
f((void *) effect->textures[i].name, d); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
615 |
f(effect->textures, d); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
616 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
617 |
for (i = 0; i < effect->shader_count; i++) |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
618 |
MOJOSHADER_freeParseData(effect->shaders[i].shader); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
619 |
f(effect->shaders, d); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
620 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
621 |
f(effect, d); |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
622 |
} // MOJOSHADER_freeEffect |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
623 |
|
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
624 |
// end of mojoshader_effects.c ... |
e8988ca01c6d
Initial work on parsing binary Effects files.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
625 |