197
197
GLuint i915_emit_texld( struct i915_fragment_program *p,
204
assert(GET_UREG_TYPE(dest) != REG_TYPE_CONST);
205
assert(dest = UREG(GET_UREG_TYPE(dest), GET_UREG_NR(dest)));
207
if (GET_UREG_TYPE(coord) != REG_TYPE_T) {
208
p->nr_tex_indirect++;
214
T0_SAMPLER( sampler ));
216
*(p->csr++) = T1_ADDRESS_REG( coord );
217
*(p->csr++) = T2_MBZ;
204
if (coord != UREG(GET_UREG_TYPE(coord), GET_UREG_NR(coord))) {
205
/* No real way to work around this in the general case - need to
206
* allocate and declare a new temporary register (a utemp won't
207
* do). Will fallback for now.
209
i915_program_error(p, "Can't (yet) swizzle TEX arguments");
213
/* Don't worry about saturate as we only support
215
if (destmask != A0_DEST_CHANNEL_ALL) {
216
GLuint tmp = i915_get_utemp(p);
217
i915_emit_texld( p, tmp, A0_DEST_CHANNEL_ALL, sampler, coord, op );
218
i915_emit_arith( p, A0_MOV, dest, destmask, 0, tmp, 0, 0 );
222
assert(GET_UREG_TYPE(dest) != REG_TYPE_CONST);
223
assert(dest = UREG(GET_UREG_TYPE(dest), GET_UREG_NR(dest)));
225
if (GET_UREG_TYPE(coord) != REG_TYPE_T) {
226
p->nr_tex_indirect++;
231
T0_SAMPLER( sampler ));
233
*(p->csr++) = T1_ADDRESS_REG( coord );
234
*(p->csr++) = T2_MBZ;
352
370
void i915_program_error( struct i915_fragment_program *p, const char *msg )
354
/* XXX we shouldn't print anything to stdout, record GL error or
355
* call _mesa_problem()
357
fprintf(stderr, "%s\n", msg);
372
_mesa_problem(NULL, "i915_program_error: %s", msg);