[Mesa-dev] [PATCH 2/5] anv: Move Create*Pipelines into genX_cmd_buffer.c

Jason Ekstrand jason at jlekstrand.net
Sat Oct 8 18:24:17 UTC 2016


On Oct 8, 2016 10:52 AM, "Jason Ekstrand" <jason at jlekstrand.net> wrote:
>
> On Oct 8, 2016 10:36 AM, "Michael Schellenberger Costa" <
mschellenbergercosta at googlemail.com> wrote:
> >
> > Hi Jason,
> >
> >
> > is there a reason that the first counter "i" is declared outside of the
loop?
>
> Not really. I just moved the code that was there before.  I have no idea
why it was written that way.

Actually, I remember now.  In an earlier version of the spec,
CreateFooPipelines was supposed to completely clean up if any of the
pipelines failed to get created properly.  The reason I was declared
outside was so that we could have a cleanup loop running from 0 to i in the
case of failure.  Later versions of the spec, however, made it the client's
job to clean things up (or free some memory and try again) so we removed
the cleanup loop and never put i back inside the loop.

--Jason

> >
> > --Michael
> >
> >
> >
> > On 08.10.2016 18:18, Jason Ekstrand wrote:
> >>
> >> Now that we don't have meta, we have no need for a gen-agnostic
pipeline
> >> create path.  We can, instead, just generate one Create*Pipelines
function
> >> per gen and be done with it.
> >>
> >> Signed-off-by: Jason Ekstrand <jason at jlekstrand.net>
> >> ---
> >>   src/intel/vulkan/anv_genX.h      |   7 ---
> >>   src/intel/vulkan/anv_pipeline.c  | 106
---------------------------------------
> >>   src/intel/vulkan/anv_private.h   |   7 ---
> >>   src/intel/vulkan/genX_pipeline.c |  63 ++++++++++++++++++++++-
> >>   4 files changed, 61 insertions(+), 122 deletions(-)
> >>
> >> diff --git a/src/intel/vulkan/anv_genX.h b/src/intel/vulkan/anv_genX.h
> >> index b862c06..e6cef53 100644
> >> --- a/src/intel/vulkan/anv_genX.h
> >> +++ b/src/intel/vulkan/anv_genX.h
> >> @@ -65,12 +65,5 @@ genX(graphics_pipeline_create)(VkDevice _device,
> >>                                  const VkAllocationCallbacks *alloc,
> >>                                  VkPipeline *pPipeline);
> >>   -VkResult
> >> -genX(compute_pipeline_create)(VkDevice _device,
> >> -                              struct anv_pipeline_cache *cache,
> >> -                              const VkComputePipelineCreateInfo
*pCreateInfo,
> >> -                              const VkAllocationCallbacks *alloc,
> >> -                              VkPipeline *pPipeline);
> >> -
> >>   void genX(blorp_exec)(struct blorp_batch *batch,
> >>                         const struct blorp_params *params);
> >> diff --git a/src/intel/vulkan/anv_pipeline.c
b/src/intel/vulkan/anv_pipeline.c
> >> index 6a364ff..bd1bf38 100644
> >> --- a/src/intel/vulkan/anv_pipeline.c
> >> +++ b/src/intel/vulkan/anv_pipeline.c
> >> @@ -1116,109 +1116,3 @@ compile_fail:
> >>        return result;
> >>   }
> >> -
> >> -VkResult
> >> -anv_graphics_pipeline_create(
> >> -   VkDevice _device,
> >> -   VkPipelineCache _cache,
> >> -   const VkGraphicsPipelineCreateInfo *pCreateInfo,
> >> -   const VkAllocationCallbacks *pAllocator,
> >> -   VkPipeline *pPipeline)
> >> -{
> >> -   ANV_FROM_HANDLE(anv_device, device, _device);
> >> -   ANV_FROM_HANDLE(anv_pipeline_cache, cache, _cache);
> >> -
> >> -   switch (device->info.gen) {
> >> -   case 7:
> >> -      if (device->info.is_haswell)
> >> -         return gen75_graphics_pipeline_create(_device, cache,
pCreateInfo, pAllocator, pPipeline);
> >> -      else
> >> -         return gen7_graphics_pipeline_create(_device, cache,
pCreateInfo, pAllocator, pPipeline);
> >> -   case 8:
> >> -      return gen8_graphics_pipeline_create(_device, cache,
pCreateInfo, pAllocator, pPipeline);
> >> -   case 9:
> >> -      return gen9_graphics_pipeline_create(_device, cache,
pCreateInfo, pAllocator, pPipeline);
> >> -   default:
> >> -      unreachable("unsupported gen\n");
> >> -   }
> >> -}
> >> -
> >> -VkResult anv_CreateGraphicsPipelines(
> >> -    VkDevice                                    _device,
> >> -    VkPipelineCache                             pipelineCache,
> >> -    uint32_t                                    count,
> >> -    const VkGraphicsPipelineCreateInfo*         pCreateInfos,
> >> -    const VkAllocationCallbacks*                pAllocator,
> >> -    VkPipeline*                                 pPipelines)
> >> -{
> >> -   VkResult result = VK_SUCCESS;
> >> -
> >> -   unsigned i = 0;
> >> -   for (; i < count; i++) {
> >> -      result = anv_graphics_pipeline_create(_device,
> >> -                                            pipelineCache,
> >> -                                            &pCreateInfos[i],
> >> -                                            pAllocator,
&pPipelines[i]);
> >> -      if (result != VK_SUCCESS) {
> >> -         for (unsigned j = 0; j < i; j++) {
> >> -            anv_DestroyPipeline(_device, pPipelines[j], pAllocator);
> >> -         }
> >> -
> >> -         return result;
> >> -      }
> >> -   }
> >> -
> >> -   return VK_SUCCESS;
> >> -}
> >> -
> >> -static VkResult anv_compute_pipeline_create(
> >> -    VkDevice                                    _device,
> >> -    VkPipelineCache                             _cache,
> >> -    const VkComputePipelineCreateInfo*          pCreateInfo,
> >> -    const VkAllocationCallbacks*                pAllocator,
> >> -    VkPipeline*                                 pPipeline)
> >> -{
> >> -   ANV_FROM_HANDLE(anv_device, device, _device);
> >> -   ANV_FROM_HANDLE(anv_pipeline_cache, cache, _cache);
> >> -
> >> -   switch (device->info.gen) {
> >> -   case 7:
> >> -      if (device->info.is_haswell)
> >> -         return gen75_compute_pipeline_create(_device, cache,
pCreateInfo, pAllocator, pPipeline);
> >> -      else
> >> -         return gen7_compute_pipeline_create(_device, cache,
pCreateInfo, pAllocator, pPipeline);
> >> -   case 8:
> >> -      return gen8_compute_pipeline_create(_device, cache,
pCreateInfo, pAllocator, pPipeline);
> >> -   case 9:
> >> -      return gen9_compute_pipeline_create(_device, cache,
pCreateInfo, pAllocator, pPipeline);
> >> -   default:
> >> -      unreachable("unsupported gen\n");
> >> -   }
> >> -}
> >> -
> >> -VkResult anv_CreateComputePipelines(
> >> -    VkDevice                                    _device,
> >> -    VkPipelineCache                             pipelineCache,
> >> -    uint32_t                                    count,
> >> -    const VkComputePipelineCreateInfo*          pCreateInfos,
> >> -    const VkAllocationCallbacks*                pAllocator,
> >> -    VkPipeline*                                 pPipelines)
> >> -{
> >> -   VkResult result = VK_SUCCESS;
> >> -
> >> -   unsigned i = 0;
> >> -   for (; i < count; i++) {
> >> -      result = anv_compute_pipeline_create(_device, pipelineCache,
> >> -                                           &pCreateInfos[i],
> >> -                                           pAllocator,
&pPipelines[i]);
> >> -      if (result != VK_SUCCESS) {
> >> -         for (unsigned j = 0; j < i; j++) {
> >> -            anv_DestroyPipeline(_device, pPipelines[j], pAllocator);
> >> -         }
> >> -
> >> -         return result;
> >> -      }
> >> -   }
> >> -
> >> -   return VK_SUCCESS;
> >> -}
> >> diff --git a/src/intel/vulkan/anv_private.h
b/src/intel/vulkan/anv_private.h
> >> index 3545acd..761c7f3 100644
> >> --- a/src/intel/vulkan/anv_private.h
> >> +++ b/src/intel/vulkan/anv_private.h
> >> @@ -1524,13 +1524,6 @@ anv_pipeline_compile_cs(struct anv_pipeline
*pipeline,
> >>                           const char *entrypoint,
> >>                           const VkSpecializationInfo *spec_info);
> >>   -VkResult
> >> -anv_graphics_pipeline_create(VkDevice device,
> >> -                             VkPipelineCache cache,
> >> -                             const VkGraphicsPipelineCreateInfo
*pCreateInfo,
> >> -                             const VkAllocationCallbacks *alloc,
> >> -                             VkPipeline *pPipeline);
> >> -
> >>   struct anv_format {
> >>      enum isl_format isl_format:16;
> >>      struct isl_swizzle swizzle;
> >> diff --git a/src/intel/vulkan/genX_pipeline.c
b/src/intel/vulkan/genX_pipeline.c
> >> index dce7c6a..2a4dd8e 100644
> >> --- a/src/intel/vulkan/genX_pipeline.c
> >> +++ b/src/intel/vulkan/genX_pipeline.c
> >> @@ -26,8 +26,8 @@
> >>   #include "genxml/gen_macros.h"
> >>   #include "genxml/genX_pack.h"
> >>   -VkResult
> >> -genX(compute_pipeline_create)(
> >> +static VkResult
> >> +compute_pipeline_create(
> >>       VkDevice                                    _device,
> >>       struct anv_pipeline_cache *                 cache,
> >>       const VkComputePipelineCreateInfo*          pCreateInfo,
> >> @@ -133,3 +133,62 @@ genX(compute_pipeline_create)(
> >>        return VK_SUCCESS;
> >>   }
> >> +
> >> +VkResult genX(CreateGraphicsPipelines)(
> >> +    VkDevice                                    _device,
> >> +    VkPipelineCache                             pipelineCache,
> >> +    uint32_t                                    count,
> >> +    const VkGraphicsPipelineCreateInfo*         pCreateInfos,
> >> +    const VkAllocationCallbacks*                pAllocator,
> >> +    VkPipeline*                                 pPipelines)
> >> +{
> >> +   ANV_FROM_HANDLE(anv_pipeline_cache, pipeline_cache, pipelineCache);
> >> +
> >> +   VkResult result = VK_SUCCESS;
> >> +
> >> +   unsigned i = 0;
> >> +   for (; i < count; i++) {
> >> +      result = genX(graphics_pipeline_create)(_device,
> >> +                                              pipeline_cache,
> >> +                                              &pCreateInfos[i],
> >> +                                              pAllocator,
&pPipelines[i]);
> >> +      if (result != VK_SUCCESS) {
> >> +         for (unsigned j = 0; j < i; j++) {
> >> +            anv_DestroyPipeline(_device, pPipelines[j], pAllocator);
> >> +         }
> >> +
> >> +         return result;
> >> +      }
> >> +   }
> >> +
> >> +   return VK_SUCCESS;
> >> +}
> >> +
> >> +VkResult genX(CreateComputePipelines)(
> >> +    VkDevice                                    _device,
> >> +    VkPipelineCache                             pipelineCache,
> >> +    uint32_t                                    count,
> >> +    const VkComputePipelineCreateInfo*          pCreateInfos,
> >> +    const VkAllocationCallbacks*                pAllocator,
> >> +    VkPipeline*                                 pPipelines)
> >> +{
> >> +   ANV_FROM_HANDLE(anv_pipeline_cache, pipeline_cache, pipelineCache);
> >> +
> >> +   VkResult result = VK_SUCCESS;
> >> +
> >> +   unsigned i = 0;
> >> +   for (; i < count; i++) {
> >> +      result = compute_pipeline_create(_device, pipeline_cache,
> >> +                                       &pCreateInfos[i],
> >> +                                       pAllocator, &pPipelines[i]);
> >> +      if (result != VK_SUCCESS) {
> >> +         for (unsigned j = 0; j < i; j++) {
> >> +            anv_DestroyPipeline(_device, pPipelines[j], pAllocator);
> >> +         }
> >> +
> >> +         return result;
> >> +      }
> >> +   }
> >> +
> >> +   return VK_SUCCESS;
> >> +}
> >
> >
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20161008/25f9faea/attachment-0001.html>


More information about the mesa-dev mailing list