[Mesa-dev] [PATCH 2/3] noop: set missing functions

Ilia Mirkin imirkin at alum.mit.edu
Mon Aug 29 15:55:10 UTC 2016


On Mon, Aug 29, 2016 at 11:49 AM, Marek Olšák <maraeo at gmail.com> wrote:
> On Mon, Aug 29, 2016 at 5:43 PM, Ilia Mirkin <imirkin at alum.mit.edu> wrote:
>> On Mon, Aug 29, 2016 at 11:29 AM, Marek Olšák <maraeo at gmail.com> wrote:
>>> From: Marek Olšák <marek.olsak at amd.com>
>>>
>>> ---
>>>  src/gallium/drivers/noop/noop_pipe.c  | 51 +++++++++++++++++++++++++++++++++++
>>>  src/gallium/drivers/noop/noop_state.c | 24 +++++++++++++++++
>>>  2 files changed, 75 insertions(+)
>>>
>>> diff --git a/src/gallium/drivers/noop/noop_pipe.c b/src/gallium/drivers/noop/noop_pipe.c
>>> index b3e2a3e..25e0c1f 100644
>>> --- a/src/gallium/drivers/noop/noop_pipe.c
>>> +++ b/src/gallium/drivers/noop/noop_pipe.c
>>> @@ -264,42 +264,56 @@ noop_flush_resource(struct pipe_context *ctx,
>>>  }
>>>
>>>
>>>  /*
>>>   * context
>>>   */
>>>  static void noop_flush(struct pipe_context *ctx,
>>>                         struct pipe_fence_handle **fence,
>>>                         unsigned flags)
>>>  {
>>> +   if (fence)
>>> +      *fence = NULL;
>>>  }
>>>
>>>  static void noop_destroy_context(struct pipe_context *ctx)
>>>  {
>>>     FREE(ctx);
>>>  }
>>>
>>> +static boolean noop_generate_mipmap(struct pipe_context *ctx,
>>> +                                    struct pipe_resource *resource,
>>> +                                    enum pipe_format format,
>>> +                                    unsigned base_level,
>>> +                                    unsigned last_level,
>>> +                                    unsigned first_layer,
>>> +                                    unsigned last_layer)
>>> +{
>>> +   return true;
>>> +}
>>> +
>>>  static struct pipe_context *noop_create_context(struct pipe_screen *screen,
>>>                                                  void *priv, unsigned flags)
>>>  {
>>>     struct pipe_context *ctx = CALLOC_STRUCT(pipe_context);
>>>
>>>     if (!ctx)
>>>        return NULL;
>>>     ctx->screen = screen;
>>>     ctx->priv = priv;
>>>     ctx->destroy = noop_destroy_context;
>>>     ctx->flush = noop_flush;
>>>     ctx->clear = noop_clear;
>>>     ctx->clear_render_target = noop_clear_render_target;
>>>     ctx->clear_depth_stencil = noop_clear_depth_stencil;
>>>     ctx->resource_copy_region = noop_resource_copy_region;
>>> +   ctx->generate_mipmap = noop_generate_mipmap;
>>>     ctx->blit = noop_blit;
>>>     ctx->flush_resource = noop_flush_resource;
>>>     ctx->create_query = noop_create_query;
>>>     ctx->destroy_query = noop_destroy_query;
>>>     ctx->begin_query = noop_begin_query;
>>>     ctx->end_query = noop_end_query;
>>>     ctx->get_query_result = noop_get_query_result;
>>>     ctx->set_active_query_state = noop_set_active_query_state;
>>>     ctx->transfer_map = noop_transfer_map;
>>>     ctx->transfer_flush_region = noop_transfer_flush_region;
>>> @@ -352,20 +366,30 @@ static float noop_get_paramf(struct pipe_screen* pscreen,
>>>     return screen->get_paramf(screen, param);
>>>  }
>>>
>>>  static int noop_get_shader_param(struct pipe_screen* pscreen, unsigned shader, enum pipe_shader_cap param)
>>>  {
>>>     struct pipe_screen *screen = ((struct noop_pipe_screen*)pscreen)->oscreen;
>>>
>>>     return screen->get_shader_param(screen, shader, param);
>>>  }
>>>
>>> +static int noop_get_compute_param(struct pipe_screen *pscreen,
>>> +                                  enum pipe_shader_ir ir_type,
>>> +                                  enum pipe_compute_cap param,
>>> +                                  void *ret)
>>> +{
>>> +   struct pipe_screen *screen = ((struct noop_pipe_screen*)pscreen)->oscreen;
>>> +
>>> +   return screen->get_compute_param(screen, ir_type, param, ret);
>>> +}
>>> +
>>>  static boolean noop_is_format_supported(struct pipe_screen* pscreen,
>>>                                          enum pipe_format format,
>>>                                          enum pipe_texture_target target,
>>>                                          unsigned sample_count,
>>>                                          unsigned usage)
>>>  {
>>>     struct pipe_screen *screen = ((struct noop_pipe_screen*)pscreen)->oscreen;
>>>
>>>     return screen->is_format_supported(screen, format, target, sample_count, usage);
>>>  }
>>> @@ -377,20 +401,43 @@ static uint64_t noop_get_timestamp(struct pipe_screen *pscreen)
>>>
>>>  static void noop_destroy_screen(struct pipe_screen *screen)
>>>  {
>>>     struct noop_pipe_screen *noop_screen = (struct noop_pipe_screen*)screen;
>>>     struct pipe_screen *oscreen = noop_screen->oscreen;
>>>
>>>     oscreen->destroy(oscreen);
>>>     FREE(screen);
>>>  }
>>>
>>> +static void noop_fence_reference(struct pipe_screen *screen,
>>> +                          struct pipe_fence_handle **ptr,
>>> +                          struct pipe_fence_handle *fence)
>>> +{
>>> +}
>>> +
>>> +static boolean noop_fence_finish(struct pipe_screen *screen,
>>> +                                 struct pipe_context *ctx,
>>> +                                 struct pipe_fence_handle *fence,
>>> +                                 uint64_t timeout)
>>> +{
>>> +   return true;
>>> +}
>>> +
>>> +static void noop_query_memory_info(struct pipe_screen *pscreen,
>>> +                                   struct pipe_memory_info *info)
>>> +{
>>> +   struct noop_pipe_screen *noop_screen = (struct noop_pipe_screen*)pscreen;
>>> +   struct pipe_screen *screen = noop_screen->oscreen;
>>> +
>>> +   screen->query_memory_info(screen, info);
>>
>> That could end up taking a while to complete...
>
> I have no idea what you're talking about. BTW I did test all of these
> patches quite extensively.

I haven't had coffee is what I'm talking about, apparently. I read
that as an infinite loop. But screen != pscreen, so this is all good.
Sorry.

  -ilia


More information about the mesa-dev mailing list