On Thu, Jun 27, 2013 at 2:59 PM, Brian Paul <bri...@vmware.com> wrote: > On 06/27/2013 03:31 PM, Kenneth Graunke wrote: >> >> On 06/27/2013 02:20 PM, Anuj Phogat wrote: >>> >>> Assertions are not sufficient to check for null pointers as they don't >>> show up in release builds. So, add explicit null pointer checks in the >>> code. >>> >>> Signed-off-by: Anuj Phogat <anuj.pho...@gmail.com> >>> --- >>> src/mesa/program/prog_execute.c | 10 ++++++++++ >>> 1 file changed, 10 insertions(+) >>> >>> diff --git a/src/mesa/program/prog_execute.c >>> b/src/mesa/program/prog_execute.c >>> index b902006..1bcbf6b 100644 >>> --- a/src/mesa/program/prog_execute.c >>> +++ b/src/mesa/program/prog_execute.c >>> @@ -200,6 +200,8 @@ fetch_vector4(const struct prog_src_register *source, >>> { >>> const GLfloat *src = get_src_register_pointer(source, machine); >>> ASSERT(src); >>> + if (src == NULL) >>> + return; >>> >>> if (source->Swizzle == SWIZZLE_NOOP) { >>> /* no swizzling */ >>> @@ -303,6 +305,8 @@ fetch_vector1(const struct prog_src_register *source, >>> { >>> const GLfloat *src = get_src_register_pointer(source, machine); >>> ASSERT(src); >>> + if (src == NULL) >>> + return; >>> >>> result[0] = src[GET_SWZ(source->Swizzle, 0)]; >>> >>> @@ -320,6 +324,9 @@ fetch_vector1ui(const struct prog_src_register >>> *source, >>> const struct gl_program_machine *machine) >>> { >>> const GLuint *src = (GLuint *) get_src_register_pointer(source, >>> machine); >>> + ASSERT(src); >>> + if (src == NULL) >>> + return 0; >>> return src[GET_SWZ(source->Swizzle, 0)]; >>> } >>> >>> @@ -1439,8 +1446,11 @@ _mesa_execute_program(struct gl_context * ctx, >>> { >>> const struct prog_src_register *source = &inst->SrcReg[0]; >>> const GLfloat *src = get_src_register_pointer(source, >>> machine); >>> + ASSERT(src); >>> GLfloat result[4]; >>> GLuint i; >>> + if (src == NULL) >>> + return GL_FALSE; >>> for (i = 0; i < 4; i++) { >>> const GLuint swz = GET_SWZ(source->Swizzle, i); >>> if (swz == SWIZZLE_ZERO) >>> >> >> I don't like this. I would just put an abort() below the _mesa_problem >> in get_src_register_pointer. > > > For release builds I don't think that we ever want to abort/exit. > > I think the only time get_src_register_pointer() can return NULL is for the > case of an invalid register file. And we could instead return the ZeroVec > there. Yes. This is a better option for get_src_register_pointer(). But I think we can't return ZeroVec (a const float*) instead of NULL in get_dst_register_pointer(). Should we return dummyReg instead?
> > -Brian > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev