i915: Let i915_program_error take a format string, and don't use _mesa_problem.

It's misleading to report things like the program having too many native
instructions as a Mesa implementation error, when the program may just be
too big for the hardware.
This commit is contained in:
Eric Anholt 2009-07-30 12:32:40 -07:00
parent 5d2413fca4
commit 994d1db079
3 changed files with 24 additions and 12 deletions

View File

@ -89,7 +89,8 @@ src_vector(struct i915_fragment_program *p,
*/
case PROGRAM_TEMPORARY:
if (source->Index >= I915_MAX_TEMPORARY) {
i915_program_error(p, "Exceeded max temporary reg");
i915_program_error(p, "Exceeded max temporary reg: %d/%d",
source->Index, I915_MAX_TEMPORARY);
return 0;
}
src = UREG(REG_TYPE_R, source->Index);
@ -124,7 +125,7 @@ src_vector(struct i915_fragment_program *p,
break;
default:
i915_program_error(p, "Bad source->Index");
i915_program_error(p, "Bad source->Index: %d", source->Index);
return 0;
}
break;
@ -153,7 +154,7 @@ src_vector(struct i915_fragment_program *p,
break;
default:
i915_program_error(p, "Bad source->File");
i915_program_error(p, "Bad source->File: %d", source->File);
return 0;
}
@ -186,13 +187,14 @@ get_result_vector(struct i915_fragment_program *p,
p->depth_written = 1;
return UREG(REG_TYPE_OD, 0);
default:
i915_program_error(p, "Bad inst->DstReg.Index");
i915_program_error(p, "Bad inst->DstReg.Index: %d",
inst->DstReg.Index);
return 0;
}
case PROGRAM_TEMPORARY:
return UREG(REG_TYPE_R, inst->DstReg.Index);
default:
i915_program_error(p, "Bad inst->DstReg.File");
i915_program_error(p, "Bad inst->DstReg.File: %d", inst->DstReg.File);
return 0;
}
}
@ -231,7 +233,7 @@ translate_tex_src_target(struct i915_fragment_program *p, GLubyte bit)
case TEXTURE_CUBE_INDEX:
return D0_SAMPLE_TYPE_CUBE;
default:
i915_program_error(p, "TexSrcBit");
i915_program_error(p, "TexSrcBit: %d", bit);
return 0;
}
}
@ -870,7 +872,8 @@ upload_program(struct i915_fragment_program *p)
return;
default:
i915_program_error(p, "bad opcode");
i915_program_error(p, "bad opcode: %s",
_mesa_opcode_string(inst->Opcode));
return;
}

View File

@ -424,12 +424,21 @@ i915_emit_param4fv(struct i915_fragment_program * p, const GLfloat * values)
return 0;
}
/* Warning the user about program errors seems to be quite valuable, from
* our bug reports. It unfortunately means piglit reporting errors
* when we fall back to software due to an unsupportable program, though.
*/
void
i915_program_error(struct i915_fragment_program *p, const char *msg)
i915_program_error(struct i915_fragment_program *p, const char *fmt, ...)
{
_mesa_problem(NULL, "i915_program_error: %s", msg);
va_list args;
fprintf(stderr, "i915_program_error: ");
va_start(args, fmt);
vfprintf(stderr, fmt, args);
va_end(args);
fprintf(stderr, "\n");
p->error = 1;
}

View File

@ -145,7 +145,7 @@ extern GLuint i915_emit_param4fv(struct i915_fragment_program *p,
const GLfloat * values);
extern void i915_program_error(struct i915_fragment_program *p,
const char *msg);
const char *fmt, ...);
extern void i915_init_program(struct i915_context *i915,
struct i915_fragment_program *p);