Home | History | Annotate | Download | only in Shader

Lines Matching refs:Shader

26 	VertexProgram::VertexProgram(const VertexProcessor::State &state, const VertexShader *shader)
27 : VertexRoutine(state, shader), shader(shader), r(shader->dynamicallyIndexedTemporaries)
43 if(shader && shader->containsBreakInstruction())
48 if(shader && shader->containsContinueInstruction())
53 if(shader->instanceIdDeclared)
86 // shader->print("VertexShader-%0.8X.txt", state.shaderID);
88 unsigned short version = shader->getVersion();
93 if(shader->containsLeaveInstruction())
99 for(size_t i = 0; i < shader->getLength(); i++)
101 const Shader::Instruction *instruction = shader->getInstruction(i);
102 Shader::Opcode opcode = instruction->opcode;
104 if(opcode == Shader::OPCODE_CALL || opcode == Shader::OPCODE_CALLNZ)
113 for(size_t i = 0; i < shader->getLength(); i++)
115 const Shader::Instruction *instruction = shader->getInstruction(i);
116 Shader::Opcode opcode = instruction->opcode;
118 if(opcode == Shader::OPCODE_DCL || opcode == Shader::OPCODE_DEF || opcode == Shader::OPCODE_DEFI || opcode == Shader::OPCODE_DEFB)
132 bool integer = dst.type == Shader::PARAMETER_ADDR;
142 if(src0.type != Shader::PARAMETER_VOID) s0 = fetchRegister(src0);
143 if(src1.type != Shader::PARAMETER_VOID) s1 = fetchRegister(src1);
144 if(src2.type != Shader::PARAMETER_VOID) s2 = fetchRegister(src2);
145 if(src3.type != Shader::PARAMETER_VOID) s3 = fetchRegister(src3);
146 if(src4.type != Shader::PARAMETER_VOID) s4 = fetchRegister(src4);
150 case Shader::OPCODE_VS_1_0: break;
151 case Shader::OPCODE_VS_1_1: break;
152 case Shader::OPCODE_VS_2_0: break;
153 case Shader::OPCODE_VS_2_x: break;
154 case Shader::OPCODE_VS_2_sw: break;
155 case Shader::OPCODE_VS_3_0: break;
156 case Shader::OPCODE_VS_3_sw: break;
157 case Shader::OPCODE_DCL: break;
158 case Shader::OPCODE_DEF: break;
159 case Shader::OPCODE_DEFI: break;
160 case Shader::OPCODE_DEFB: break;
161 case Shader::OPCODE_NOP: break;
162 case Shader::OPCODE_ABS: abs(d, s0); break;
163 case Shader::OPCODE_IABS: iabs(d, s0); break;
164 case Shader::OPCODE_ADD: add(d, s0, s1); break;
165 case Shader::OPCODE_IADD: iadd(d, s0, s1); break;
166 case Shader::OPCODE_CRS: crs(d, s0, s1); break;
167 case Shader::OPCODE_FORWARD1: forward1(d, s0, s1, s2); break;
168 case Shader::OPCODE_FORWARD2: forward2(d, s0, s1, s2); break;
169 case Shader::OPCODE_FORWARD3: forward3(d, s0, s1, s2); break;
170 case Shader::OPCODE_FORWARD4: forward4(d, s0, s1, s2); break;
171 case Shader::OPCODE_REFLECT1: reflect1(d, s0, s1); break;
172 case Shader::OPCODE_REFLECT2: reflect2(d, s0, s1); break;
173 case Shader::OPCODE_REFLECT3: reflect3(d, s0, s1); break;
174 case Shader::OPCODE_REFLECT4: reflect4(d, s0, s1); break;
175 case Shader::OPCODE_REFRACT1: refract1(d, s0, s1, s2.x); break;
176 case Shader::OPCODE_REFRACT2: refract2(d, s0, s1, s2.x); break;
177 case Shader::OPCODE_REFRACT3: refract3(d, s0, s1, s2.x); break;
178 case Shader::OPCODE_REFRACT4: refract4(d, s0, s1, s2.x); break;
179 case Shader::OPCODE_DP1: dp1(d, s0, s1); break;
180 case Shader::OPCODE_DP2: dp2(d, s0, s1); break;
181 case Shader::OPCODE_DP3: dp3(d, s0, s1); break;
182 case Shader::OPCODE_DP4: dp4(d, s0, s1); break;
183 case Shader::OPCODE_DET2: det2(d, s0, s1); break;
184 case Shader::OPCODE_DET3: det3(d, s0, s1, s2); break;
185 case Shader::OPCODE_DET4: det4(d, s0, s1, s2, s3); break;
186 case Shader::OPCODE_ATT: att(d, s0, s1); break;
187 case Shader::OPCODE_EXP2X: exp2x(d, s0, pp); break;
188 case Shader::OPCODE_EXP2: exp2(d, s0, pp); break;
189 case Shader::OPCODE_EXPP: expp(d, s0, version); break;
190 case Shader::OPCODE_EXP: exp(d, s0, pp); break;
191 case Shader::OPCODE_FRC: frc(d, s0); break;
192 case Shader::OPCODE_TRUNC: trunc(d, s0); break;
193 case Shader::OPCODE_FLOOR: floor(d, s0); break;
194 case Shader::OPCODE_ROUND: round(d, s0); break;
195 case Shader::OPCODE_ROUNDEVEN: roundEven(d, s0); break;
196 case Shader::OPCODE_CEIL: ceil(d, s0); break;
197 case Shader::OPCODE_LIT: lit(d, s0); break;
198 case Shader::OPCODE_LOG2X: log2x(d, s0, pp); break;
199 case Shader::OPCODE_LOG2: log2(d, s0, pp); break;
200 case Shader::OPCODE_LOGP: logp(d, s0, version); break;
201 case Shader::OPCODE_LOG: log(d, s0, pp); break;
202 case Shader::OPCODE_LRP: lrp(d, s0, s1, s2); break;
203 case Shader::OPCODE_STEP: step(d, s0, s1); break;
204 case Shader::OPCODE_SMOOTH: smooth(d, s0, s1, s2); break;
205 case Shader::OPCODE_FLOATBITSTOINT:
206 case Shader::OPCODE_FLOATBITSTOUINT:
207 case Shader::OPCODE_INTBITSTOFLOAT:
208 case Shader::OPCODE_UINTBITSTOFLOAT: d = s0; break;
209 case Shader::OPCODE_PACKSNORM2x16: packSnorm2x16(d, s0); break;
210 case Shader::OPCODE_PACKUNORM2x16: packUnorm2x16(d, s0); break;
211 case Shader::OPCODE_PACKHALF2x16: packHalf2x16(d, s0); break;
212 case Shader::OPCODE_UNPACKSNORM2x16: unpackSnorm2x16(d, s0); break;
213 case Shader::OPCODE_UNPACKUNORM2x16: unpackUnorm2x16(d, s0); break;
214 case Shader::OPCODE_UNPACKHALF2x16: unpackHalf2x16(d, s0); break;
215 case Shader::OPCODE_M3X2: M3X2(d, s0, src1); break;
216 case Shader::OPCODE_M3X3: M3X3(d, s0, src1); break;
217 case Shader::OPCODE_M3X4: M3X4(d, s0, src1); break;
218 case Shader::OPCODE_M4X3: M4X3(d, s0, src1); break;
219 case Shader::OPCODE_M4X4: M4X4(d, s0, src1); break;
220 case Shader::OPCODE_MAD: mad(d, s0, s1, s2); break;
221 case Shader::OPCODE_IMAD: imad(d, s0, s1, s2); break;
222 case Shader::OPCODE_MAX: max(d, s0, s1); break;
223 case Shader::OPCODE_IMAX: imax(d, s0, s1); break;
224 case Shader::OPCODE_UMAX: umax(d, s0, s1); break;
225 case Shader::OPCODE_MIN: min(d, s0, s1); break;
226 case Shader::OPCODE_IMIN: imin(d, s0, s1); break;
227 case Shader::OPCODE_UMIN: umin(d, s0, s1); break;
228 case Shader::OPCODE_MOV: mov(d, s0, integer); break;
229 case Shader::OPCODE_MOVA: mov(d, s0, true); break;
230 case Shader::OPCODE_NEG: neg(d, s0); break;
231 case Shader::OPCODE_INEG: ineg(d, s0); break;
232 case Shader::OPCODE_F2B: f2b(d, s0); break;
233 case Shader::OPCODE_B2F: b2f(d, s0); break;
234 case Shader::OPCODE_F2I: f2i(d, s0); break;
235 case Shader::OPCODE_I2F: i2f(d, s0); break;
236 case Shader::OPCODE_F2U: f2u(d, s0); break;
237 case Shader::OPCODE_U2F: u2f(d, s0); break;
238 case Shader::OPCODE_I2B: i2b(d, s0); break;
239 case Shader::OPCODE_B2I: b2i(d, s0); break;
240 case Shader::OPCODE_MUL: mul(d, s0, s1); break;
241 case Shader::OPCODE_IMUL: imul(d, s0, s1); break;
242 case Shader::OPCODE_NRM2: nrm2(d, s0, pp); break;
243 case Shader::OPCODE_NRM3: nrm3(d, s0, pp); break;
244 case Shader::OPCODE_NRM4: nrm4(d, s0, pp); break;
245 case Shader::OPCODE_POWX: powx(d, s0, s1, pp); break;
246 case Shader::OPCODE_POW: pow(d, s0, s1, pp); break;
247 case Shader::OPCODE_RCPX: rcpx(d, s0, pp); break;
248 case Shader::OPCODE_DIV: div(d, s0, s1); break;
249 case Shader::OPCODE_IDIV: idiv(d, s0, s1); break;
250 case Shader::OPCODE_UDIV: udiv(d, s0, s1); break;
251 case Shader::OPCODE_MOD: mod(d, s0, s1); break;
252 case Shader::OPCODE_IMOD: imod(d, s0, s1); break;
253 case Shader::OPCODE_UMOD: umod(d, s0, s1); break;
254 case Shader::OPCODE_SHL: shl(d, s0, s1); break;
255 case Shader::OPCODE_ISHR: ishr(d, s0, s1); break;
256 case Shader::OPCODE_USHR: ushr(d, s0, s1); break;
257 case Shader::OPCODE_RSQX: rsqx(d, s0, pp); break;
258 case Shader::OPCODE_SQRT: sqrt(d, s0, pp); break;
259 case Shader::OPCODE_RSQ: rsq(d, s0, pp); break;
260 case Shader::OPCODE_LEN2: len2(d.x, s0, pp); break;
261 case Shader::OPCODE_LEN3: len3(d.x, s0, pp); break;
262 case Shader::OPCODE_LEN4: len4(d.x, s0, pp); break;
263 case Shader::OPCODE_DIST1: dist1(d.x, s0, s1, pp); break;
264 case Shader::OPCODE_DIST2: dist2(d.x, s0, s1, pp); break;
265 case Shader::OPCODE_DIST3: dist3(d.x, s0, s1, pp); break;
266 case Shader::OPCODE_DIST4: dist4(d.x, s0, s1, pp); break;
267 case Shader::OPCODE_SGE: step(d, s1, s0); break;
268 case Shader::OPCODE_SGN: sgn(d, s0); break;
269 case Shader::OPCODE_ISGN: isgn(d, s0); break;
270 case Shader::OPCODE_SINCOS: sincos(d, s0, pp); break;
271 case Shader::OPCODE_COS: cos(d, s0, pp); break;
272 case Shader::OPCODE_SIN: sin(d, s0, pp); break;
273 case Shader::OPCODE_TAN: tan(d, s0); break;
274 case Shader::OPCODE_ACOS: acos(d, s0); break;
275 case Shader::OPCODE_ASIN: asin(d, s0); break;
276 case Shader::OPCODE_ATAN: atan(d, s0); break;
277 case Shader::OPCODE_ATAN2: atan2(d, s0, s1); break;
278 case Shader::OPCODE_COSH: cosh(d, s0, pp); break;
279 case Shader::OPCODE_SINH: sinh(d, s0, pp); break;
280 case Shader::OPCODE_TANH: tanh(d, s0, pp); break;
281 case Shader::OPCODE_ACOSH: acosh(d, s0, pp); break;
282 case Shader::OPCODE_ASINH: asinh(d, s0, pp); break;
283 case Shader::OPCODE_ATANH: atanh(d, s0, pp); break;
284 case Shader::OPCODE_SLT: slt(d, s0, s1); break;
285 case Shader::OPCODE_SUB: sub(d, s0, s1); break;
286 case Shader::OPCODE_ISUB: isub(d, s0, s1); break;
287 case Shader::OPCODE_BREAK: BREAK(); break;
288 case Shader::OPCODE_BREAKC: BREAKC(s0, s1, control); break;
289 case Shader::OPCODE_BREAKP: BREAKP(src0); break;
290 case Shader::OPCODE_CONTINUE: CONTINUE(); break;
291 case Shader::OPCODE_TEST: TEST(); break;
292 case Shader::OPCODE_CALL: CALL(dst.label, dst.callSite); break;
293 case Shader::OPCODE_CALLNZ: CALLNZ(dst.label, dst.callSite, src0); break;
294 case Shader::OPCODE_ELSE: ELSE(); break;
295 case Shader::OPCODE_ENDIF: ENDIF(); break;
296 case Shader::OPCODE_ENDLOOP: ENDLOOP(); break;
297 case Shader::OPCODE_ENDREP: ENDREP(); break;
298 case Shader::OPCODE_ENDWHILE: ENDWHILE(); break;
299 case Shader::OPCODE_ENDSWITCH: ENDSWITCH(); break;
300 case Shader::OPCODE_IF: IF(src0); break;
301 case Shader::OPCODE_IFC: IFC(s0, s1, control); break;
302 case Shader::OPCODE_LABEL: LABEL(dst.index); break;
303 case Shader::OPCODE_LOOP: LOOP(src1); break;
304 case Shader::OPCODE_REP: REP(src0); break;
305 case Shader::OPCODE_WHILE: WHILE(src0); break;
306 case Shader::OPCODE_SWITCH: SWITCH(); break;
307 case Shader::OPCODE_RET: RET(); break;
308 case Shader::OPCODE_LEAVE: LEAVE(); break;
309 case Shader::OPCODE_CMP: cmp(d, s0, s1, control); break;
310 case Shader::OPCODE_ICMP: icmp(d, s0, s1, control); break;
311 case Shader::OPCODE_UCMP: ucmp(d, s0, s1, control); break;
312 case Shader::OPCODE_SELECT: select(d, s0, s1, s2); break;
313 case Shader::OPCODE_EXTRACT: extract(d.x, s0, s1.x); break;
314 case Shader::OPCODE_INSERT: insert(d, s0, s1.x, s2.x); break;
315 case Shader::OPCODE_ALL: all(d.x, s0); break;
316 case Shader::OPCODE_ANY: any(d.x, s0); break;
317 case Shader::OPCODE_NOT: not(d, s0); break;
318 case Shader::OPCODE_OR: or(d, s0, s1); break;
319 Shader::OPCODE_XOR: xor(d, s0, s1); break;
320 case Shader::OPCODE_AND: and(d, s0, s1); break;
321 case Shader::OPCODE_EQ: equal(d, s0, s1); break;
322 case Shader::OPCODE_NE: notEqual(d, s0, s1); break;
323 case Shader::OPCODE_TEXLDL: TEXLDL(d, s0, src1); break;
324 case Shader::OPCODE_TEX: TEX(d, s0, src1); break;
325 case Shader::OPCODE_TEXOFFSET: TEXOFFSET(d, s0, src1, s2, s3); break;
326 case Shader::OPCODE_TEXLDLOFFSET: TEXLDL(d, s0, src1, s2); break;
327 case Shader::OPCODE_TEXELFETCH: TEXELFETCH(d, s0, src1, s2); break;
328 case Shader::OPCODE_TEXELFETCHOFFSET: TEXELFETCH(d, s0, src1, s2, s3); break;
329 case Shader::OPCODE_TEXGRAD: TEXGRAD(d, s0, src1, s2, s3); break;
330 case Shader::OPCODE_TEXGRADOFFSET: TEXGRAD(d, s0, src1, s2, s3, s4); break;
331 case Shader::OPCODE_TEXSIZE: TEXSIZE(d, s0.x, src1); break;
332 case Shader::OPCODE_END: break;
337 if(dst.type != Shader::PARAMETER_VOID && dst.type != Shader::PARAMETER_LABEL && opcode != Shader::OPCODE_NOP)
343 case Shader::OPCODE_DIV:
373 case Shader::PARAMETER_VOID: break;
374 case Shader::PARAMETER_TEMP:
375 if(dst.rel.type == Shader::PARAMETER_VOID)
392 case Shader::PARAMETER_ADDR: pDst = a0; break;
393 case Shader::PARAMETER_RASTOUT:
412 case Shader::PARAMETER_ATTROUT:
418 case Shader::PARAMETER_TEXCRDOUT:
419 // case Shader::PARAMETER_OUTPUT:
429 if(dst.rel.type == Shader::PARAMETER_VOID) // Not relative
447 case Shader::PARAMETER_LABEL: break;
448 case Shader::PARAMETER_PREDICATE: pDst = p0; break;
449 case Shader::PARAMETER_INPUT: break;
499 case Shader::PARAMETER_VOID:
501 case Shader::PARAMETER_TEMP:
502 if(dst.rel.type == Shader::PARAMETER_VOID)
519 case Shader::PARAMETER_ADDR:
525 case Shader::PARAMETER_RASTOUT:
543 case Shader::PARAMETER_ATTROUT:
549 case Shader::PARAMETER_TEXCRDOUT:
550 // case Shader::PARAMETER_OUTPUT:
560 if(dst.rel.type == Shader::PARAMETER_VOID) // Not relative
578 case Shader::PARAMETER_LABEL: break;
579 case Shader::PARAMETER_PREDICATE: p0 = d; break;
580 case Shader::PARAMETER_INPUT: break;
595 if(shader)
599 unsigned char usage = shader->output[i][0].usage;
605 case Shader::USAGE_PSIZE:
608 case Shader::USAGE_TEXCOORD:
614 case Shader::USAGE_POSITION:
620 case Shader::USAGE_COLOR:
626 case Shader::USAGE_FOG:
668 case Shader::PARAMETER_TEMP:
669 if(src.rel.type == Shader::PARAMETER_VOID)
678 case Shader::PARAMETER_CONST:
681 case Shader::PARAMETER_INPUT:
682 if(src.rel.type == Shader::PARAMETER_VOID)
691 case Shader::PARAMETER_VOID: return r[0]; // Dummy
692 case Shader::PARAMETER_FLOAT4LITERAL:
698 case Shader::PARAMETER_ADDR: reg = a0; break;
699 case Shader::PARAMETER_CONSTBOOL: return r[0]; // Dummy
700 case Shader::PARAMETER_CONSTINT: return r[0]; // Dummy
701 case Shader::PARAMETER_LOOP: return r[0]; // Dummy
702 case Shader::PARAMETER_PREDICATE: return r[0]; // Dummy
703 case Shader::PARAMETER_SAMPLER:
704 if(src.rel.type == Shader::PARAMETER_VOID)
708 else if(src.rel.type == Shader::PARAMETER_TEMP)
713 case Shader::PARAMETER_OUTPUT:
714 if(src.rel.type == Shader::PARAMETER_VOID)
723 case Shader::PARAMETER_MISCTYPE:
739 case Shader::MODIFIER_NONE:
745 case Shader::MODIFIER_NEGATE:
751 case Shader::MODIFIER_ABS:
757 case Shader::MODIFIER_ABS_NEGATE:
763 case Shader::MODIFIER_NOT:
798 if(src.rel.type == Shader::PARAMETER_VOID) // Not relative
807 if(shader->containsDefineInstruction()) // Constant may be known at compile time
809 for(size_t j = 0; j < shader->getLength(); j++)
811 const Shader::Instruction &instruction = *shader->getInstruction(j);
813 if(instruction.opcode == Shader::OPCODE_DEF)
828 else if(src.rel.type == Shader::PARAMETER_LOOP)
859 case Shader::PARAMETER_ADDR: a = a0[component]; break;
860 case Shader::PARAMETER_TEMP: a = r[src.rel.index][component]; break;
861 case Shader::PARAMETER_INPUT: a = v[src.rel.index][component]; break;
862 case Shader::PARAMETER_OUTPUT: a = o[src.rel.index][component]; break;
863 case Shader::PARAMETER_CONST: a = *Pointer<Float>(uniformAddress(src.bufferIndex, src.rel.index) + component * sizeof(float)); break;
888 Int VertexProgram::relativeAddress(const Shader::Parameter &var, int bufferIndex)
892 if(var.rel.type == Shader::PARAMETER_TEMP)
896 else if(var.rel.type == Shader::PARAMETER_INPUT)
900 else if(var.rel.type == Shader::PARAMETER_OUTPUT)
904 else if(var.rel.type == Shader::PARAMETER_CONST)
908 else if(var.rel.type == Shader::PARAMETER_LOOP)
917 Shader::Instruction *instruction)
923 if(shader->containsBreakInstruction() && instruction->analysisBreak)
928 if(shader->containsContinueInstruction() && instruction->analysisContinue)
933 if(shader->containsLeaveInstruction() && instruction->analysisLeave)
1028 case Shader::CONTROL_GT: condition = CmpNLE(src0.x, src1.x); break;
1029 case Shader::CONTROL_EQ: condition = CmpEQ(src0.x, src1.x); break;
1030 case Shader::CONTROL_GE: condition = CmpNLT(src0.x, src1.x); break;
1031 case Shader::CONTROL_LT: condition = CmpLT(src0.x, src1.x); break;
1032 case Shader::CONTROL_NE: condition = CmpNEQ(src0.x, src1.x); break;
1033 case Shader::CONTROL_LE: condition = CmpLE(src0.x, src1.x); break;
1045 if(predicateRegister.modifier == Shader::MODIFIER_NOT)
1102 if(src.type == Shader::PARAMETER_CONSTBOOL)
1106 else if(src.type == Shader::PARAMETER_PREDICATE)
1117 if(boolRegister.modifier == Shader::MODIFIER_NOT)
1144 if(predicateRegister.modifier == Shader::MODIFIER_NOT)
1276 if(src.type == Shader::PARAMETER_CONSTBOOL)
1280 else if(src.type == Shader::PARAMETER_PREDICATE)
1297 if(boolRegister.modifier == Shader::MODIFIER_NOT)
1317 if(predicateRegister.modifier == Shader::MODIFIER_NOT)
1331 case Shader::CONTROL_GT: condition = CmpNLE(src0.x, src1.x); break;
1332 case Shader::CONTROL_EQ: condition = CmpEQ(src0.x, src1.x); break;
1333 case Shader::CONTROL_GE: condition = CmpNLT(src0.x, src1.x); break;
1334 case Shader::CONTROL_LT: condition = CmpLT(src0.x, src1.x); break;
1335 case Shader::CONTROL_NE: condition = CmpNEQ(src0.x, src1.x); break;
1336 case Shader::CONTROL_LE: condition = CmpLE(src0.x, src1.x); break;
1459 if(shader->containsLeaveInstruction()) condition &= enableLeave;
1592 if(s.type == Shader::PARAMETER_SAMPLER && s.rel.type == Shader::PARAMETER_VOID)
1603 if(shader->usesSampler(i))