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:
@@ -89,7 +89,8 @@ src_vector(struct i915_fragment_program *p,
|
|||||||
*/
|
*/
|
||||||
case PROGRAM_TEMPORARY:
|
case PROGRAM_TEMPORARY:
|
||||||
if (source->Index >= I915_MAX_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;
|
return 0;
|
||||||
}
|
}
|
||||||
src = UREG(REG_TYPE_R, source->Index);
|
src = UREG(REG_TYPE_R, source->Index);
|
||||||
@@ -124,7 +125,7 @@ src_vector(struct i915_fragment_program *p,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
i915_program_error(p, "Bad source->Index");
|
i915_program_error(p, "Bad source->Index: %d", source->Index);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -153,7 +154,7 @@ src_vector(struct i915_fragment_program *p,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
i915_program_error(p, "Bad source->File");
|
i915_program_error(p, "Bad source->File: %d", source->File);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -186,13 +187,14 @@ get_result_vector(struct i915_fragment_program *p,
|
|||||||
p->depth_written = 1;
|
p->depth_written = 1;
|
||||||
return UREG(REG_TYPE_OD, 0);
|
return UREG(REG_TYPE_OD, 0);
|
||||||
default:
|
default:
|
||||||
i915_program_error(p, "Bad inst->DstReg.Index");
|
i915_program_error(p, "Bad inst->DstReg.Index: %d",
|
||||||
|
inst->DstReg.Index);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
case PROGRAM_TEMPORARY:
|
case PROGRAM_TEMPORARY:
|
||||||
return UREG(REG_TYPE_R, inst->DstReg.Index);
|
return UREG(REG_TYPE_R, inst->DstReg.Index);
|
||||||
default:
|
default:
|
||||||
i915_program_error(p, "Bad inst->DstReg.File");
|
i915_program_error(p, "Bad inst->DstReg.File: %d", inst->DstReg.File);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -231,7 +233,7 @@ translate_tex_src_target(struct i915_fragment_program *p, GLubyte bit)
|
|||||||
case TEXTURE_CUBE_INDEX:
|
case TEXTURE_CUBE_INDEX:
|
||||||
return D0_SAMPLE_TYPE_CUBE;
|
return D0_SAMPLE_TYPE_CUBE;
|
||||||
default:
|
default:
|
||||||
i915_program_error(p, "TexSrcBit");
|
i915_program_error(p, "TexSrcBit: %d", bit);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -870,7 +872,8 @@ upload_program(struct i915_fragment_program *p)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
i915_program_error(p, "bad opcode");
|
i915_program_error(p, "bad opcode: %s",
|
||||||
|
_mesa_opcode_string(inst->Opcode));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -424,12 +424,21 @@ i915_emit_param4fv(struct i915_fragment_program * p, const GLfloat * values)
|
|||||||
return 0;
|
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
|
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;
|
p->error = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -145,7 +145,7 @@ extern GLuint i915_emit_param4fv(struct i915_fragment_program *p,
|
|||||||
const GLfloat * values);
|
const GLfloat * values);
|
||||||
|
|
||||||
extern void i915_program_error(struct i915_fragment_program *p,
|
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,
|
extern void i915_init_program(struct i915_context *i915,
|
||||||
struct i915_fragment_program *p);
|
struct i915_fragment_program *p);
|
||||||
|
Reference in New Issue
Block a user