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:
parent
5d2413fca4
commit
994d1db079
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue