> -----Original Message-----
> From: Brian Paul [mailto:[EMAIL PROTECTED]
> Sent: 2007年10月31日 23:55
> To: Zou, Nanhai
> Cc: Nan hai Zou; MESA-Devel
> Subject: Re: i965 glsl support
> 
> Zou Nan hai wrote:
> > On Mon, 2007-10-29 at 23:58, Brian Paul wrote:
> >> Nan hai Zou wrote:
> >>
> >> [... git check-in info ...]
> >>
> >> Nan,
> >>
> >> Since you've merged the i965 GLSL support into Mesa/master, can you
> >> summarize what state it's in?  Is it fully functional, or are there some
> >> unfinished bits?
> >>
> >> In any case, it's great to have this!
> >>
> >> I've found one problem, however.  In shader/program.c in
> >> _mesa_new_shader() you added a call to ctx->Driver.NewProgram():
> >>
> >> struct gl_program *
> >> _mesa_new_program(GLcontext *ctx, GLenum target, GLuint id)
> >> {
> >>     if (ctx->Driver.NewProgram)
> >>          return ctx->Driver.NewProgram(ctx, target, id);
> >> [...]
> >>
> >>
> >> This causes infinite recursive calls with software drivers since
> >> ctx->Driver.NewProgram is initialized to point to _mesa_new_program().
> >>
> >> I'm going to disable this code.  Let me know what problem you were
> >> trying to fix with this change.
> >>
> >> -Brian
> >
> > Hi Brain,
> >     The state of glsl on 965 is that it is functional.
> > I have run the glean glsl test. 168 test passed except 1 case that do
> > texture sampling in vertex shader failed.
> >
> > The programs in prog/glsl/ works except the noise program.
> >
> >     I am adding the Driver.NewProgram call is because 965 driver attach
> > some field after the brw_vertex/fragment_program field,
> 
> Not sure I understand what you're saying.  Can you explain?
> 
> 

In i865/brw_program.c -> 
i965 driver->NewProgram which is 
brwNewProgram 
allocate the data with CALLOC_STRUCT(brw_vertex_program), 
struct brw_vertex_program is defined as
{
  struct gl_vertex_program program;
  GLuint id;
  GLuint param_state;
};

the id and param state will be referenced during driver select or upload 
program...
however _mesa_new_program only CALLOC_STRUCT(gl_vertex_program).

> > but mesa core
> > only allocate sizeof(brw_vertex/fragment_program), so I have to call
> > driver specific allocate function
> 
> How is _mesa_new_program() getting called?  It shouldn't be used at all
> with the i965 driver.
> 

In brwNewProgram, It will be called if the target is neither 
GL_VERTEX_PROGRAM_ARB nor GL_FRAGMENT_PROGRAM_ARB. So normally 
_mesa_new_program() will not be called from i965 driver.

This is usually called from slang_compile.c and slang_emit.c.

So maybe we should call Driver->NewProgram instead of directly calling 
_mesa_new_program in slang_compile.c and slang_emit.c?

Thanks
Zou Nan hai
> -Brian

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Mesa3d-dev mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev

Reply via email to