[Mesa-dev] [PATCH 11/16] nvc0: use of new counter types

Ilia Mirkin imirkin at alum.mit.edu
Mon Jul 7 13:01:20 PDT 2014


On Mon, Jul 7, 2014 at 3:45 PM, Samuel Pitoiset
<samuel.pitoiset at gmail.com> wrote:
> On 07/07/2014 06:32 PM, Ilia Mirkin wrote:
>>
>> On Mon, Jul 7, 2014 at 11:47 AM, Samuel Pitoiset
>> <samuel.pitoiset at gmail.com> wrote:
>>>
>>> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
>>> ---
>>>   src/gallium/drivers/nouveau/nvc0/nvc0_query.c | 19 +++++++++++++------
>>>   1 file changed, 13 insertions(+), 6 deletions(-)
>>>
>>> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_query.c
>>> b/src/gallium/drivers/nouveau/nvc0/nvc0_query.c
>>> index 3e8c90b..2ce4378 100644
>>> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_query.c
>>> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_query.c
>>> @@ -1405,6 +1405,12 @@ nvc0_screen_get_driver_query_info(struct
>>> pipe_screen *pscreen,
>>>      if (!info)
>>>         return count;
>>>
>>> +   /* Init default parameters. */
>>> +   info->max_value.ui = 0;
>>> +   info->is_percentage = 0;
>>> +   info->is_float = 0;
>>> +   info->uses_byte_units = FALSE;
>>> +
>>>   #ifdef NOUVEAU_ENABLE_DRIVER_STATISTICS
>>>      if (id < NVC0_QUERY_DRV_STAT_COUNT) {
>>>         info->name = nvc0_drv_stat_names[id];
>>> @@ -1420,9 +1426,13 @@ nvc0_screen_get_driver_query_info(struct
>>> pipe_screen *pscreen,
>>>            info->name = nve4_pm_query_names[id -
>>> NVC0_QUERY_DRV_STAT_COUNT];
>>>            info->query_type = NVE4_PM_QUERY(id -
>>> NVC0_QUERY_DRV_STAT_COUNT);
>>>            info->group_id = NVC0_QUERY_PM_GROUP;
>>> -         info->max_value.ui = (id < NVE4_PM_QUERY_METRIC_MP_OCCUPANCY) ?
>>> -            ~0ULL : 100;
>>> -         info->uses_byte_units = FALSE;
>>> +         if (id < NVE4_PM_QUERY_METRIC_MP_OCCUPANCY) {
>>> +             info->max_value.ui = ~0ULL;
>>> +         } else {
>>> +             info->max_value.f = 100.0;
>>> +             info->is_float = 1;
>>> +             info->is_percentage = 1;
>>
>> But the value is still to be returned the same way as a uint64?
>> Presumably you'd want to find a way to use the float bits for more
>> precision than just the integers 0..100, no? Otherwise it seems that
>> the ->is_float thing has no meaning...
>
>
> Yes, the value returned with pipe_driver_query is still a uint64, so this
> code
> is just useless as well. :)
>
> I'll keep the uint64 stuff and improve the precision later.

So then ->is_float is a lie, right? The st might then be tempted to
actually return a floating point value despite it being a u64...

IMHO this series would make the most sense if structured as:

(a) add generic group interface, including the float/etc stuff,
without requiring that a driver actually make use of that. this patch
subgroup should include the patch that updates the begin_query
interface.
(b) add the mesa/st bits to make use of this interface (although it
won't actually get exposed since no drivers would support the new
hotness)
(c) update drivers to implement this interface in a simple manner
(e.g. by just returning what they already return).
(d) make further updates to drivers to implement fanciness like doing
floats/percentages/multiple groups

At least that's how I've been structuring my feature-adding patch
series, and I'm fairly sure others have as well. [And I'll push out
your nvc0 not-enough-space fix soonish, as that's unrelated to this
series and is just a fix in its own right.]

And lastly, I know that it's inconsistently done, but if it's not too
difficult, try to add relevant documentation to the gallium docs
(src/gallium/docs/source, viewable at gallium.rtfd.org). This will
help future driver implementors as well as code reviewers to
understand the intended usage of your interface.

>
>
>>
>>> +         }
>>>            return 1;
>>>         } else
>>>         if (screen->compute) {
>>> @@ -1430,7 +1440,6 @@ nvc0_screen_get_driver_query_info(struct
>>> pipe_screen *pscreen,
>>>            info->query_type = NVC0_PM_QUERY(id -
>>> NVC0_QUERY_DRV_STAT_COUNT);
>>>            info->group_id = NVC0_QUERY_PM_GROUP;
>>>            info->max_value.ui = ~0ULL;
>>> -         info->uses_byte_units = FALSE;
>>>            return 1;
>>>         }
>>>      }
>>> @@ -1438,8 +1447,6 @@ nvc0_screen_get_driver_query_info(struct
>>> pipe_screen *pscreen,
>>>      info->name = "this_is_not_the_query_you_are_looking_for";
>>>      info->query_type = 0xdeadd01d;
>>>      info->group_id = 0;
>>> -   info->max_value.ui = 0;
>>> -   info->uses_byte_units = FALSE;
>>>      return 0;
>>>   }
>>>
>>> --
>>> 2.0.0
>>>
>>> _______________________________________________
>>> mesa-dev mailing list
>>> mesa-dev at lists.freedesktop.org
>>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
>


More information about the mesa-dev mailing list