On 05/20/2013 10:31 AM, Paul Berry wrote:
On 17 May 2013 10:17, Kenneth Graunke <kenn...@whitecape.org> wrote:
    diff --git a/src/mesa/drivers/dri/i965/brw_context.c
    b/src/mesa/drivers/dri/i965/brw_context.c
    index 2f5fedb..beade5c 100644
    --- a/src/mesa/drivers/dri/i965/brw_context.c
    +++ b/src/mesa/drivers/dri/i965/brw_context.c
    @@ -88,6 +88,8 @@ static void brwInitDriverFunctions(struct
    intel_screen *screen,

         brwInitFragProgFuncs( functions );
         brw_init_queryobj_functions(functions);
    +   if (screen->gen >= 6)
    +      gen6_reinit_queryobj_functions(functions);


I find it confusing that we initialize the queryobj function pointers to
the pre-gen6 functions and then immediately override some of them to
gen6+ versions.

How about splitting brw_init_queryobj_functions() into
brw_init_common_queryobj_functions() and
brw_init_pre_gen6_queryobj_functions(), and renaming
gen6_reinit_queryobj_functions() to just gen6_init_queryobj_functions()?

Then this code would change to:

brw_init_common_queryobj_functions()
if (screen->gen < 6)
    brw_init_pre_gen6_queryobj_functions()
else
    gen6_init_queryobj_functions()

Sure.  I've done that for v2.

         functions->QuerySamplesForFormat = brw_query_samples_for_format;
         functions->BeginTransformFeedback = brw_begin_transform_feedback;
    diff --git a/src/mesa/drivers/dri/i965/brw_context.h
    b/src/mesa/drivers/dri/i965/brw_context.h
    index 9baf57b..9ef6aca 100644
    --- a/src/mesa/drivers/dri/i965/brw_context.h
    +++ b/src/mesa/drivers/dri/i965/brw_context.h
    @@ -1164,6 +1164,9 @@ void brw_init_queryobj_functions(struct
    dd_function_table *functions);
      void brw_emit_query_begin(struct brw_context *brw);
      void brw_emit_query_end(struct brw_context *brw);

    +/** gen6_queryobj.c */
    +void gen6_reinit_queryobj_functions(struct dd_function_table
    *functions);
    +
      /*======================================================================
       * brw_state_dump.c
       */
    diff --git a/src/mesa/drivers/dri/i965/brw_queryobj.c
    b/src/mesa/drivers/dri/i965/brw_queryobj.c
    index 40f926b..1c1e0b4 100644
    --- a/src/mesa/drivers/dri/i965/brw_queryobj.c
    +++ b/src/mesa/drivers/dri/i965/brw_queryobj.c


So is brw_queryobj.c now for pre-Gen6 only?  If so, can we please add a
comment to that effect at the top of the file, and remove the remaining
intel->gen checks (e.g. in write_timestamp())?  If not, can we somehow
document which functions are Pre-gen6 and which aren't (e.g. with
"assert(intel->gen < 6);" at the top of the pre-gen6 functions)?  As it
stands this patch leaves the file in a condition where it's hard to tell
without a deep understanding of the driver which functions are for which
chip generations.

Not completely. The timer query functions are still shared, as are the new/delete hooks. I've added a bunch of assertions and comments to clarify.

[snip]
         case GL_SAMPLES_PASSED_ARB:


Below this code, in the GL_PRIMITIVES_GENERATED and
GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN cases, can we change the
comment so that instead of saying "We don't actually query the hardware
for this value, so query->bo should always be NULL and execution should
never reach here." it says something like "Transform feedback isn't
supported pre-gen6"?

Similarly, there's code in brw_begin_query() and brw_end_query() for
handling GL_PRIMITIVES_GENERATED and
GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN that is now unreachable because
we don't support transform feedback prior to Gen6.  I think we should
replace it with a comment to that affect and an assertion.

I've done basically just that in a follow-up patch which reworks a bunch of the transform feedback stuff. Unless it's a big deal, I'll just plan on keeping it as a follow-up.

    @@ -545,6 +502,9 @@ brw_emit_query_begin(struct brw_context *brw)
         struct gl_context *ctx = &intel->ctx;
         struct brw_query_object *query = brw->query.obj;

    +   if (intel->hw_ctx)
    +      return;
    +


The comment above brw_emit_query_begin() says that we record
PS_DEPTH_COUNT at the beginning and end of each batch, regardless of
whether hardware contexts are in use.  Can we please change the comment
to reflect the new behavioukr?

Done.
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to