[Mesa-dev] [PATCH v2 2/7] nv50: allocate a software object class

Samuel Pitoiset samuel.pitoiset at gmail.com
Thu Jul 23 08:02:25 PDT 2015



On 07/22/2015 10:35 PM, Martin Peres wrote:
> On 01/07/15 01:01, Samuel Pitoiset wrote:
>> This will allow to monitor global performance counters through the
>> command stream of the GPU instead of using ioctls.
>>
>> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
>> ---
>>   src/gallium/drivers/nouveau/nv50/nv50_screen.c | 11 +++++++++++
>>   src/gallium/drivers/nouveau/nv50/nv50_screen.h |  1 +
>>   src/gallium/drivers/nouveau/nv50/nv50_winsys.h |  1 +
>>   3 files changed, 13 insertions(+)
>>
>> diff --git a/src/gallium/drivers/nouveau/nv50/nv50_screen.c 
>> b/src/gallium/drivers/nouveau/nv50/nv50_screen.c
>> index 6583a35..c985344 100644
>> --- a/src/gallium/drivers/nouveau/nv50/nv50_screen.c
>> +++ b/src/gallium/drivers/nouveau/nv50/nv50_screen.c
>> @@ -367,6 +367,7 @@ nv50_screen_destroy(struct pipe_screen *pscreen)
>>      nouveau_object_del(&screen->eng2d);
>>      nouveau_object_del(&screen->m2mf);
>>      nouveau_object_del(&screen->sync);
>> +   nouveau_object_del(&screen->sw);
>>        nouveau_screen_fini(&screen->base);
>>   @@ -437,6 +438,9 @@ nv50_screen_init_hwctx(struct nv50_screen *screen)
>>      BEGIN_NV04(push, SUBC_3D(NV01_SUBCHAN_OBJECT), 1);
>>      PUSH_DATA (push, screen->tesla->handle);
>>   +   BEGIN_NV04(push, SUBC_SW(NV01_SUBCHAN_OBJECT), 1);
>> +   PUSH_DATA (push, screen->sw->handle);
>> +
>>      BEGIN_NV04(push, NV50_3D(COND_MODE), 1);
>>      PUSH_DATA (push, NV50_3D_COND_MODE_ALWAYS);
>>   @@ -768,6 +772,13 @@ nv50_screen_create(struct nouveau_device *dev)
>>         goto fail;
>>      }
>>   +   ret = nouveau_object_new(chan, 0xbeef506e, 0x506e,
> I guess the 0x506e needs to be defined in libdrm, right?

According to nvc0, the handle is not defined in libdrm.
No need to do that I think, isn't it?

>
> Other than that, it is Reviewed-by: Martin Peres <martin.peres at free.fr>
>> +                            NULL, 0, &screen->sw);
>> +   if (ret) {
>> +      NOUVEAU_ERR("Failed to allocate SW object: %d\n", ret);
>> +      goto fail;
>> +   }
>> +
>>      ret = nouveau_object_new(chan, 0xbeef5039, NV50_M2MF_CLASS,
>>                               NULL, 0, &screen->m2mf);
>>      if (ret) {
>> diff --git a/src/gallium/drivers/nouveau/nv50/nv50_screen.h 
>> b/src/gallium/drivers/nouveau/nv50/nv50_screen.h
>> index 881051b..69fdfdb 100644
>> --- a/src/gallium/drivers/nouveau/nv50/nv50_screen.h
>> +++ b/src/gallium/drivers/nouveau/nv50/nv50_screen.h
>> @@ -93,6 +93,7 @@ struct nv50_screen {
>>      struct nouveau_object *tesla;
>>      struct nouveau_object *eng2d;
>>      struct nouveau_object *m2mf;
>> +   struct nouveau_object *sw;
>>   };
>>     static INLINE struct nv50_screen *
>> diff --git a/src/gallium/drivers/nouveau/nv50/nv50_winsys.h 
>> b/src/gallium/drivers/nouveau/nv50/nv50_winsys.h
>> index e8578c8..5cb33ef 100644
>> --- a/src/gallium/drivers/nouveau/nv50/nv50_winsys.h
>> +++ b/src/gallium/drivers/nouveau/nv50/nv50_winsys.h
>> @@ -60,6 +60,7 @@ PUSH_REFN(struct nouveau_pushbuf *push, struct 
>> nouveau_bo *bo, uint32_t flags)
>>   #define SUBC_COMPUTE(m) 6, (m)
>>   #define NV50_COMPUTE(n) SUBC_COMPUTE(NV50_COMPUTE_##n)
>>   +#define SUBC_SW(m) 7, (m)
>>     static INLINE uint32_t
>>   NV50_FIFO_PKHDR(int subc, int mthd, unsigned size)
>



More information about the mesa-dev mailing list