Am Freitag, den 23.11.2007, 10:21 +0000 schrieb Keith Whitwell:
> Ben Skeggs wrote:
> > Hey,
> > 
> > Attached is a patch which adds driver hooks to update the status of a
> > query object (both to core mesa, and the gallium state tracker).  There
> > is currently an issue with applications that spin waiting for
> > GL_QUERY_RESULT_AVAILABLE_ARB to be true (eg. arbocclude).  The current
> > code will simply check return q->Ready, and doesn't give the driver a
> > chance to actually update this field, so the application will end up
> > spinning forever.
> > 
> > The workaround in nouveau (current git, and nv4x gallium driver)
> > currently forces the application to block until a query result is
> > available when it calls glEndQuery().  Obviously this isn't a nice
> > solution!
> 
> I think I'm going to rejig the pipe query interface.  I'm not really 
> happy with the pipe_query_object struct, I think it can just go away and 
> become an opaque handle to a structure private to the driver, so we get 
> an interface more like this:
> 
>     struct pipe_query_object *(*create_query)( struct pipe_context *pipe,
>                                                unsigned query_type );
> 
>     void (*destroy_query)(struct pipe_context *pipe,
>                           struct pipe_query_object *q);
> 
>     void (*begin_query)(struct pipe_context *pipe,
>                      struct pipe_query_object *q);
> 
>     void (*end_query)(struct pipe_context *pipe,
>                    struct pipe_query_object *q);
> 
>     boolean (*get_query_result)(struct pipe_context *pipe,
>                                 struct pipe_query_object *q,
>                                 boolean wait,
>                                 uint64_t *result);
> 
This looks much better.  In the nv4x gallium driver I currently store
pointers to the pipe_query_objects in an array and use that to lookup
the driver private info.  The above interface would do away with that
hack :)

> 
> Even this is probably too constrained as future query types may provide 
> some more elaborate structure as a result, eg multiple hardware counters 
> in a struct or similar.
Perhaps something like the current struct pipe_query_object, but keep
the driver's create_query() call so it can allocate the pipe object as a
subclass of its own query object struct.  And have the driver maintain
the fields of pipe_query_object it supports?

Ben.
> 
> Keith

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Mesa3d-dev mailing list
Mesa3d-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev

Reply via email to