[Mesa-dev] [PATCH 01/18] anv: Add a short style guide

Ian Romanick idr at freedesktop.org
Tue Apr 19 21:27:55 UTC 2016


On 04/18/2016 07:34 PM, Jason Ekstrand wrote:
> 
> 
> On Mon, Apr 18, 2016 at 5:35 PM, Ian Romanick <idr at freedesktop.org
> <mailto:idr at freedesktop.org>> wrote:
> 
>     On 04/18/2016 05:10 PM, Jason Ekstrand wrote:
>     > ---
>     >  src/intel/vulkan/STYLE | 67
>     ++++++++++++++++++++++++++++++++++++++++++++++++++
>     >  1 file changed, 67 insertions(+)
>     >  create mode 100644 src/intel/vulkan/STYLE
>     >
>     > diff --git a/src/intel/vulkan/STYLE b/src/intel/vulkan/STYLE
>     > new file mode 100644
>     > index 0000000..4eb8f79
>     > --- /dev/null
>     > +++ b/src/intel/vulkan/STYLE
>     > @@ -0,0 +1,67 @@
>     > +The Intel Vulkan driver typically follows the mesa coding style
>     with a few
>     > +exceptions.  First is that structs declared in anv_private.h
>     should be
>     > +written as follows:
>     > +
>     > +struct anv_foo {
>     > +   int                  short_type;
>     > +   struct anv_long_type long_type;
>     > +   void *               ptr;
>     > +};
>     > +
>     > +Where the * for pointers goes one space after the type and the
>     names are
>     > +vertically aligned.  The names should be tabbed over the minimum
>     amount
>     > +(still a multiple of 3 spaces) such that they can all be aligned.
>     > +
>     > +When the anv_batch_emit function is used, it should look as follows:
>     > +
>     > +anv_batch_emit(&cmd_buffer->batch, GENX(3DPRIMITIVE),
>     > +   .VertexAccessType       = SEQUENTIAL,
>     > +   .PrimitiveTopologyType  = pipeline->topology,
>     > +   .VertexCountPerInstance = vertexCount,
>     > +   .StartVertexLocation    = firstVertex,
>     > +   .InstanceCount          = instanceCount,
>     > +   .StartInstanceLocation  = firstInstance,
>     > +   .BaseVertexLocation     = 0);
>     > +
>     > +The batch and struct name parameters should go on the same line
>     with the
>     > +anv_batch_emit call and each named parameter on its own line.  The
>     > +alignment rules are the same as for structs where all of the "=" are
>     > +vertically aligned at the minimum tabstop required to do so.
>     > +
>     > +Eventually, we would like to move to a block-based packing
>     mechanism.  In
>     > +this case, the above packing macro would look like this:
>     > +
>     > +anv_batch_emit(&cmd_buffer->batch, GENX(3DPRIMITIVE), prim) {
>     > +   prim.VertexAccessType         = SEQUENTIAL;
>     > +   prim.PrimitiveTopologyType    = pipeline->topology;
>     > +   prim.VertexCountPerInstance   = vertexCount;
>     > +   prim.StartVertexLocation      = firstVertex;
>     > +   prim.InstanceCount            = instanceCount;
>     > +   prim.StartInstanceLocation    = firstInstance;
>     > +   prim.BaseVertexLocation       = 0;
>     > +}
> 
>     When I first read the style guide, I thought, "Man, that looks nice."
>     Then I read all the patches, and I thought, "Man, that looks irritating
>     to type."  I don't know a way to make any text editor (or indent) do
>     this for me automatically, so it seems really irritating to write.
> 
> It's not that bad with block-edit in vim.  Sometimes it's nicer,
> sometimes it's not.
>  
>     Are we sure we want to commit to doing this?  It would be easy enough to
>     change now using sed on the patches, but changing it later will be much
>     more painful.
> 
> Mind saying what "this" is?

Having the aligned = as the style.

>     Also... it seems like patch 18 should update this. :)

"This" here is the "Eventually, we would like to move to a block-based
packing mechanism."  After patch 18, that is reality, not a possible
future.  Right?

>     > +
>     > +With this new block mechansim, you may end up mixing code and
>     declarations.
>     > +In this case, it's up to the discression of the programmer
>     exactly how to
>     > +tab things but trying to keep with the above rules is recommended.
>     > +
>     > +In meta code, we use a fair number of compound initializers for
>     more easily
>     > +calling Vulkan functions that require struct arguments.  These
>     should be
>     > +declared as follows:
>     > +
>     > +anv_CreateFramebuffer(anv_device_to_handle(device),
>     > +   &(VkFramebufferCreateInfo) {
>     > +      .sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO,
>     > +      .attachmentCount = 1,
>     > +      .pAttachments = (VkImageView[]) {
>     > +         anv_image_view_to_handle(dest_iview),
>     > +      },
>     > +      .width = dest_iview->extent.width,
>     > +      .height = dest_iview->extent.height,
>     > +      .layers = 1
>     > +   }, &cmd_buffer->pool->alloc, &fb);
>     > +
>     > +The initial arguments go on the same line as the call and the primary
>     > +struct being passed in is declared on its own line tabbed over 1
>     tab with
>     > +it's contents on the following lines tabbed over an additional tab.
>     > +Substructures get tabbed over by additional tabs as needed.
>     >
> 
> 



More information about the mesa-dev mailing list