<p dir="ltr"></p>
<p dir="ltr">On Oct 8, 2016 10:36 AM, "Michael Schellenberger Costa" <<a href="mailto:mschellenbergercosta@googlemail.com">mschellenbergercosta@googlemail.com</a>> wrote:<br>
><br>
> Hi Jason,<br>
><br>
><br>
> is there a reason that the first counter "i" is declared outside of the loop?</p>
<p dir="ltr">Not really. I just moved the code that was there before.  I have no idea why it was written that way.</p>
<p dir="ltr">><br>
> --Michael<br>
><br>
><br>
><br>
> On 08.10.2016 18:18, Jason Ekstrand wrote:<br>
>><br>
>> Now that we don't have meta, we have no need for a gen-agnostic pipeline<br>
>> create path.  We can, instead, just generate one Create*Pipelines function<br>
>> per gen and be done with it.<br>
>><br>
>> Signed-off-by: Jason Ekstrand <<a href="mailto:jason@jlekstrand.net">jason@jlekstrand.net</a>><br>
>> ---<br>
>>   src/intel/vulkan/anv_genX.h      |   7 ---<br>
>>   src/intel/vulkan/anv_pipeline.c  | 106 ---------------------------------------<br>
>>   src/intel/vulkan/anv_private.h   |   7 ---<br>
>>   src/intel/vulkan/genX_pipeline.c |  63 ++++++++++++++++++++++-<br>
>>   4 files changed, 61 insertions(+), 122 deletions(-)<br>
>><br>
>> diff --git a/src/intel/vulkan/anv_genX.h b/src/intel/vulkan/anv_genX.h<br>
>> index b862c06..e6cef53 100644<br>
>> --- a/src/intel/vulkan/anv_genX.h<br>
>> +++ b/src/intel/vulkan/anv_genX.h<br>
>> @@ -65,12 +65,5 @@ genX(graphics_pipeline_create)(VkDevice _device,<br>
>>                                  const VkAllocationCallbacks *alloc,<br>
>>                                  VkPipeline *pPipeline);<br>
>>   -VkResult<br>
>> -genX(compute_pipeline_create)(VkDevice _device,<br>
>> -                              struct anv_pipeline_cache *cache,<br>
>> -                              const VkComputePipelineCreateInfo *pCreateInfo,<br>
>> -                              const VkAllocationCallbacks *alloc,<br>
>> -                              VkPipeline *pPipeline);<br>
>> -<br>
>>   void genX(blorp_exec)(struct blorp_batch *batch,<br>
>>                         const struct blorp_params *params);<br>
>> diff --git a/src/intel/vulkan/anv_pipeline.c b/src/intel/vulkan/anv_pipeline.c<br>
>> index 6a364ff..bd1bf38 100644<br>
>> --- a/src/intel/vulkan/anv_pipeline.c<br>
>> +++ b/src/intel/vulkan/anv_pipeline.c<br>
>> @@ -1116,109 +1116,3 @@ compile_fail:<br>
>>        return result;<br>
>>   }<br>
>> -<br>
>> -VkResult<br>
>> -anv_graphics_pipeline_create(<br>
>> -   VkDevice _device,<br>
>> -   VkPipelineCache _cache,<br>
>> -   const VkGraphicsPipelineCreateInfo *pCreateInfo,<br>
>> -   const VkAllocationCallbacks *pAllocator,<br>
>> -   VkPipeline *pPipeline)<br>
>> -{<br>
>> -   ANV_FROM_HANDLE(anv_device, device, _device);<br>
>> -   ANV_FROM_HANDLE(anv_pipeline_cache, cache, _cache);<br>
>> -<br>
>> -   switch (device->info.gen) {<br>
>> -   case 7:<br>
>> -      if (device->info.is_haswell)<br>
>> -         return gen75_graphics_pipeline_create(_device, cache, pCreateInfo, pAllocator, pPipeline);<br>
>> -      else<br>
>> -         return gen7_graphics_pipeline_create(_device, cache, pCreateInfo, pAllocator, pPipeline);<br>
>> -   case 8:<br>
>> -      return gen8_graphics_pipeline_create(_device, cache, pCreateInfo, pAllocator, pPipeline);<br>
>> -   case 9:<br>
>> -      return gen9_graphics_pipeline_create(_device, cache, pCreateInfo, pAllocator, pPipeline);<br>
>> -   default:<br>
>> -      unreachable("unsupported gen\n");<br>
>> -   }<br>
>> -}<br>
>> -<br>
>> -VkResult anv_CreateGraphicsPipelines(<br>
>> -    VkDevice                                    _device,<br>
>> -    VkPipelineCache                             pipelineCache,<br>
>> -    uint32_t                                    count,<br>
>> -    const VkGraphicsPipelineCreateInfo*         pCreateInfos,<br>
>> -    const VkAllocationCallbacks*                pAllocator,<br>
>> -    VkPipeline*                                 pPipelines)<br>
>> -{<br>
>> -   VkResult result = VK_SUCCESS;<br>
>> -<br>
>> -   unsigned i = 0;<br>
>> -   for (; i < count; i++) {<br>
>> -      result = anv_graphics_pipeline_create(_device,<br>
>> -                                            pipelineCache,<br>
>> -                                            &pCreateInfos[i],<br>
>> -                                            pAllocator, &pPipelines[i]);<br>
>> -      if (result != VK_SUCCESS) {<br>
>> -         for (unsigned j = 0; j < i; j++) {<br>
>> -            anv_DestroyPipeline(_device, pPipelines[j], pAllocator);<br>
>> -         }<br>
>> -<br>
>> -         return result;<br>
>> -      }<br>
>> -   }<br>
>> -<br>
>> -   return VK_SUCCESS;<br>
>> -}<br>
>> -<br>
>> -static VkResult anv_compute_pipeline_create(<br>
>> -    VkDevice                                    _device,<br>
>> -    VkPipelineCache                             _cache,<br>
>> -    const VkComputePipelineCreateInfo*          pCreateInfo,<br>
>> -    const VkAllocationCallbacks*                pAllocator,<br>
>> -    VkPipeline*                                 pPipeline)<br>
>> -{<br>
>> -   ANV_FROM_HANDLE(anv_device, device, _device);<br>
>> -   ANV_FROM_HANDLE(anv_pipeline_cache, cache, _cache);<br>
>> -<br>
>> -   switch (device->info.gen) {<br>
>> -   case 7:<br>
>> -      if (device->info.is_haswell)<br>
>> -         return gen75_compute_pipeline_create(_device, cache, pCreateInfo, pAllocator, pPipeline);<br>
>> -      else<br>
>> -         return gen7_compute_pipeline_create(_device, cache, pCreateInfo, pAllocator, pPipeline);<br>
>> -   case 8:<br>
>> -      return gen8_compute_pipeline_create(_device, cache, pCreateInfo, pAllocator, pPipeline);<br>
>> -   case 9:<br>
>> -      return gen9_compute_pipeline_create(_device, cache, pCreateInfo, pAllocator, pPipeline);<br>
>> -   default:<br>
>> -      unreachable("unsupported gen\n");<br>
>> -   }<br>
>> -}<br>
>> -<br>
>> -VkResult anv_CreateComputePipelines(<br>
>> -    VkDevice                                    _device,<br>
>> -    VkPipelineCache                             pipelineCache,<br>
>> -    uint32_t                                    count,<br>
>> -    const VkComputePipelineCreateInfo*          pCreateInfos,<br>
>> -    const VkAllocationCallbacks*                pAllocator,<br>
>> -    VkPipeline*                                 pPipelines)<br>
>> -{<br>
>> -   VkResult result = VK_SUCCESS;<br>
>> -<br>
>> -   unsigned i = 0;<br>
>> -   for (; i < count; i++) {<br>
>> -      result = anv_compute_pipeline_create(_device, pipelineCache,<br>
>> -                                           &pCreateInfos[i],<br>
>> -                                           pAllocator, &pPipelines[i]);<br>
>> -      if (result != VK_SUCCESS) {<br>
>> -         for (unsigned j = 0; j < i; j++) {<br>
>> -            anv_DestroyPipeline(_device, pPipelines[j], pAllocator);<br>
>> -         }<br>
>> -<br>
>> -         return result;<br>
>> -      }<br>
>> -   }<br>
>> -<br>
>> -   return VK_SUCCESS;<br>
>> -}<br>
>> diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h<br>
>> index 3545acd..761c7f3 100644<br>
>> --- a/src/intel/vulkan/anv_private.h<br>
>> +++ b/src/intel/vulkan/anv_private.h<br>
>> @@ -1524,13 +1524,6 @@ anv_pipeline_compile_cs(struct anv_pipeline *pipeline,<br>
>>                           const char *entrypoint,<br>
>>                           const VkSpecializationInfo *spec_info);<br>
>>   -VkResult<br>
>> -anv_graphics_pipeline_create(VkDevice device,<br>
>> -                             VkPipelineCache cache,<br>
>> -                             const VkGraphicsPipelineCreateInfo *pCreateInfo,<br>
>> -                             const VkAllocationCallbacks *alloc,<br>
>> -                             VkPipeline *pPipeline);<br>
>> -<br>
>>   struct anv_format {<br>
>>      enum isl_format isl_format:16;<br>
>>      struct isl_swizzle swizzle;<br>
>> diff --git a/src/intel/vulkan/genX_pipeline.c b/src/intel/vulkan/genX_pipeline.c<br>
>> index dce7c6a..2a4dd8e 100644<br>
>> --- a/src/intel/vulkan/genX_pipeline.c<br>
>> +++ b/src/intel/vulkan/genX_pipeline.c<br>
>> @@ -26,8 +26,8 @@<br>
>>   #include "genxml/gen_macros.h"<br>
>>   #include "genxml/genX_pack.h"<br>
>>   -VkResult<br>
>> -genX(compute_pipeline_create)(<br>
>> +static VkResult<br>
>> +compute_pipeline_create(<br>
>>       VkDevice                                    _device,<br>
>>       struct anv_pipeline_cache *                 cache,<br>
>>       const VkComputePipelineCreateInfo*          pCreateInfo,<br>
>> @@ -133,3 +133,62 @@ genX(compute_pipeline_create)(<br>
>>        return VK_SUCCESS;<br>
>>   }<br>
>> +<br>
>> +VkResult genX(CreateGraphicsPipelines)(<br>
>> +    VkDevice                                    _device,<br>
>> +    VkPipelineCache                             pipelineCache,<br>
>> +    uint32_t                                    count,<br>
>> +    const VkGraphicsPipelineCreateInfo*         pCreateInfos,<br>
>> +    const VkAllocationCallbacks*                pAllocator,<br>
>> +    VkPipeline*                                 pPipelines)<br>
>> +{<br>
>> +   ANV_FROM_HANDLE(anv_pipeline_cache, pipeline_cache, pipelineCache);<br>
>> +<br>
>> +   VkResult result = VK_SUCCESS;<br>
>> +<br>
>> +   unsigned i = 0;<br>
>> +   for (; i < count; i++) {<br>
>> +      result = genX(graphics_pipeline_create)(_device,<br>
>> +                                              pipeline_cache,<br>
>> +                                              &pCreateInfos[i],<br>
>> +                                              pAllocator, &pPipelines[i]);<br>
>> +      if (result != VK_SUCCESS) {<br>
>> +         for (unsigned j = 0; j < i; j++) {<br>
>> +            anv_DestroyPipeline(_device, pPipelines[j], pAllocator);<br>
>> +         }<br>
>> +<br>
>> +         return result;<br>
>> +      }<br>
>> +   }<br>
>> +<br>
>> +   return VK_SUCCESS;<br>
>> +}<br>
>> +<br>
>> +VkResult genX(CreateComputePipelines)(<br>
>> +    VkDevice                                    _device,<br>
>> +    VkPipelineCache                             pipelineCache,<br>
>> +    uint32_t                                    count,<br>
>> +    const VkComputePipelineCreateInfo*          pCreateInfos,<br>
>> +    const VkAllocationCallbacks*                pAllocator,<br>
>> +    VkPipeline*                                 pPipelines)<br>
>> +{<br>
>> +   ANV_FROM_HANDLE(anv_pipeline_cache, pipeline_cache, pipelineCache);<br>
>> +<br>
>> +   VkResult result = VK_SUCCESS;<br>
>> +<br>
>> +   unsigned i = 0;<br>
>> +   for (; i < count; i++) {<br>
>> +      result = compute_pipeline_create(_device, pipeline_cache,<br>
>> +                                       &pCreateInfos[i],<br>
>> +                                       pAllocator, &pPipelines[i]);<br>
>> +      if (result != VK_SUCCESS) {<br>
>> +         for (unsigned j = 0; j < i; j++) {<br>
>> +            anv_DestroyPipeline(_device, pPipelines[j], pAllocator);<br>
>> +         }<br>
>> +<br>
>> +         return result;<br>
>> +      }<br>
>> +   }<br>
>> +<br>
>> +   return VK_SUCCESS;<br>
>> +}<br>
><br>
></p>