Re: [Mesa-dev] [PATCH 09/12] nir: Add a simple growing array data structure

2015-04-23 Thread Emil Velikov
On 13/04/15 01:51, Matt Turner wrote:
 On Sun, Apr 12, 2015 at 6:38 PM, Jason Ekstrand ja...@jlekstrand.net wrote:

 On Apr 12, 2015 3:24 PM, Thomas Helland thomashellan...@gmail.com wrote:

 Hi,

 This looks correct as far as I can tell.
 I have some comments inline, but I don't feel strongly about
 either of them, so do as you please.

 Also, maybe this is a candidate for /src/util ?

 Maybe. If so I'm OK leaving it here until there are other users.

 2015-04-11 2:48 GMT+02:00 Jason Ekstrand ja...@jlekstrand.net:
 ---
  src/glsl/nir/nir_array.h | 96
 
  1 file changed, 96 insertions(+)
  create mode 100644 src/glsl/nir/nir_array.h

 diff --git a/src/glsl/nir/nir_array.h b/src/glsl/nir/nir_array.h
 new file mode 100644
 index 000..1db4e8c
 --- /dev/null
 +++ b/src/glsl/nir/nir_array.h
 @@ -0,0 +1,96 @@
 +/*
 + * Copyright © 2015 Intel Corporation
 + *
 + * Permission is hereby granted, free of charge, to any person
 obtaining a
 + * copy of this software and associated documentation files (the
 Software),
 + * to deal in the Software without restriction, including without
 limitation
 + * the rights to use, copy, modify, merge, publish, distribute,
 sublicense,
 + * and/or sell copies of the Software, and to permit persons to whom
 the
 + * Software is furnished to do so, subject to the following conditions:
 + *
 + * The above copyright notice and this permission notice (including the
 next
 + * paragraph) shall be included in all copies or substantial portions
 of the
 + * Software.
 + *
 + * THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND,
 EXPRESS OR
 + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 MERCHANTABILITY,
 + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT
 SHALL
 + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
 OTHER
 + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
 ARISING
 + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 DEALINGS
 + * IN THE SOFTWARE.
 + *
 + * Authors:
 + *Jason Ekstrand (ja...@jlekstrand.net)
 + *
 + */
 +
 +#pragma once
 +
 +#ifdef __cplusplus
 +extern C {
 +#endif
 +
 +typedef struct {
 +   void *mem_ctx;
 +   size_t size;
 +   size_t alloc;

 Maybe alloced or alloced_mem instead?
 I was a bit puzzled initially about its purpose.

 Sure
 
 FWIW, I use length and size for these two things.
There are also the std::vector names - capacity and size, if anyone
is keen on them :-)


Jason,

Can you squash the following hunk before pushing.

diff --git a/src/glsl/Makefile.sources b/src/glsl/Makefile.sources
index c471eca..d784a81 100644
--- a/src/glsl/Makefile.sources
+++ b/src/glsl/Makefile.sources
@@ -22,6 +22,7 @@ NIR_FILES = \
nir/glsl_to_nir.h \
nir/nir.c \
nir/nir.h \
+   nir/nir_array.h \
nir/nir_builder.h \
nir/nir_constant_expressions.h \
nir/nir_dominance.c \


Thanks
Emil
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 09/12] nir: Add a simple growing array data structure

2015-04-23 Thread Jason Ekstrand
On Thu, Apr 23, 2015 at 10:14 AM, Emil Velikov emil.l.veli...@gmail.com wrote:
 On 13/04/15 01:51, Matt Turner wrote:
 On Sun, Apr 12, 2015 at 6:38 PM, Jason Ekstrand ja...@jlekstrand.net wrote:

 On Apr 12, 2015 3:24 PM, Thomas Helland thomashellan...@gmail.com wrote:

 Hi,

 This looks correct as far as I can tell.
 I have some comments inline, but I don't feel strongly about
 either of them, so do as you please.

 Also, maybe this is a candidate for /src/util ?

 Maybe. If so I'm OK leaving it here until there are other users.

 2015-04-11 2:48 GMT+02:00 Jason Ekstrand ja...@jlekstrand.net:
 ---
  src/glsl/nir/nir_array.h | 96
 
  1 file changed, 96 insertions(+)
  create mode 100644 src/glsl/nir/nir_array.h

 diff --git a/src/glsl/nir/nir_array.h b/src/glsl/nir/nir_array.h
 new file mode 100644
 index 000..1db4e8c
 --- /dev/null
 +++ b/src/glsl/nir/nir_array.h
 @@ -0,0 +1,96 @@
 +/*
 + * Copyright © 2015 Intel Corporation
 + *
 + * Permission is hereby granted, free of charge, to any person
 obtaining a
 + * copy of this software and associated documentation files (the
 Software),
 + * to deal in the Software without restriction, including without
 limitation
 + * the rights to use, copy, modify, merge, publish, distribute,
 sublicense,
 + * and/or sell copies of the Software, and to permit persons to whom
 the
 + * Software is furnished to do so, subject to the following conditions:
 + *
 + * The above copyright notice and this permission notice (including the
 next
 + * paragraph) shall be included in all copies or substantial portions
 of the
 + * Software.
 + *
 + * THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND,
 EXPRESS OR
 + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 MERCHANTABILITY,
 + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT
 SHALL
 + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
 OTHER
 + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
 ARISING
 + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 DEALINGS
 + * IN THE SOFTWARE.
 + *
 + * Authors:
 + *Jason Ekstrand (ja...@jlekstrand.net)
 + *
 + */
 +
 +#pragma once
 +
 +#ifdef __cplusplus
 +extern C {
 +#endif
 +
 +typedef struct {
 +   void *mem_ctx;
 +   size_t size;
 +   size_t alloc;

 Maybe alloced or alloced_mem instead?
 I was a bit puzzled initially about its purpose.

 Sure

 FWIW, I use length and size for these two things.
 There are also the std::vector names - capacity and size, if anyone
 is keen on them :-)


 Jason,

 Can you squash the following hunk before pushing.

 diff --git a/src/glsl/Makefile.sources b/src/glsl/Makefile.sources
 index c471eca..d784a81 100644
 --- a/src/glsl/Makefile.sources
 +++ b/src/glsl/Makefile.sources
 @@ -22,6 +22,7 @@ NIR_FILES = \
 nir/glsl_to_nir.h \
 nir/nir.c \
 nir/nir.h \
 +   nir/nir_array.h \
 nir/nir_builder.h \
 nir/nir_constant_expressions.h \
 nir/nir_dominance.c \

Sorry, it already got pushed.  However, if you put that hunk into a
patch, consider it R-B me.
--Jason

 Thanks
 Emil
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 09/12] nir: Add a simple growing array data structure

2015-04-22 Thread Jason Ekstrand
On Wed, Apr 22, 2015 at 3:03 PM, Connor Abbott cwabbo...@gmail.com wrote:
 I think it would be better to call this nir_vector rather than
 nir_array, since this is essentially a poor man's version of
 std::vector. Is this ok with you?

I battled over that one for quite a while.  In the end, I settled on
nir_array because NIR is a compiler IR for vector architectures and I
was concerned that a datatype called nir_vector that was not, in fact,
a vector in the mathematical sense would be troublesome.
--Jason

 On Fri, Apr 10, 2015 at 8:48 PM, Jason Ekstrand ja...@jlekstrand.net wrote:
 ---
  src/glsl/nir/nir_array.h | 96 
 
  1 file changed, 96 insertions(+)
  create mode 100644 src/glsl/nir/nir_array.h

 diff --git a/src/glsl/nir/nir_array.h b/src/glsl/nir/nir_array.h
 new file mode 100644
 index 000..1db4e8c
 --- /dev/null
 +++ b/src/glsl/nir/nir_array.h
 @@ -0,0 +1,96 @@
 +/*
 + * Copyright © 2015 Intel Corporation
 + *
 + * Permission is hereby granted, free of charge, to any person obtaining a
 + * copy of this software and associated documentation files (the 
 Software),
 + * to deal in the Software without restriction, including without limitation
 + * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 + * and/or sell copies of the Software, and to permit persons to whom the
 + * Software is furnished to do so, subject to the following conditions:
 + *
 + * The above copyright notice and this permission notice (including the next
 + * paragraph) shall be included in all copies or substantial portions of the
 + * Software.
 + *
 + * THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS 
 OR
 + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 
 OTHER
 + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
 DEALINGS
 + * IN THE SOFTWARE.
 + *
 + * Authors:
 + *Jason Ekstrand (ja...@jlekstrand.net)
 + *
 + */
 +
 +#pragma once
 +
 +#ifdef __cplusplus
 +extern C {
 +#endif
 +
 +typedef struct {
 +   void *mem_ctx;
 +   size_t size;
 +   size_t alloc;
 +   void *data;
 +} nir_array;
 +
 +static inline void
 +nir_array_init(nir_array *arr, void *mem_ctx)
 +{
 +   arr-mem_ctx = mem_ctx;
 +   arr-size = 0;
 +   arr-alloc = 0;
 +   arr-data = NULL;
 +}
 +
 +static inline void
 +nir_array_fini(nir_array *arr)
 +{
 +   if (arr-mem_ctx)
 +  ralloc_free(arr-data);
 +   else
 +  free(arr-data);
 +}
 +
 +#define NIR_ARRAY_INITIAL_SIZE 64
 +
 +/* Increments the size of the array by the given ammount and returns a
 + * pointer to the beginning of the newly added space.
 + */
 +static inline void *
 +nir_array_grow(nir_array *arr, size_t additional)
 +{
 +   size_t new_size = arr-size + additional;
 +   if (new_size  arr-alloc) {
 +  if (arr-alloc == 0)
 + arr-alloc = NIR_ARRAY_INITIAL_SIZE;
 +
 +  while (new_size  arr-alloc)
 + arr-alloc *= 2;
 +
 +  if (arr-mem_ctx)
 + arr-data = reralloc_size(arr-mem_ctx, arr-data, arr-alloc);
 +  else
 + arr-data = realloc(arr-data, arr-alloc);
 +   }
 +
 +   void *ptr = (void *)((char *)arr-data + arr-size);
 +   arr-size = new_size;
 +
 +   return ptr;
 +}
 +
 +#define nir_array_add(arr, type, elem) \
 +   *(type *)nir_array_grow(arr, sizeof(type)) = (elem)
 +
 +#define nir_array_foreach(arr, type, elem) \
 +   for (type *elem = (type *)(arr)-data; \
 +elem  (type *)((char *)(arr)-data + (arr)-size); elem++)
 +
 +#ifdef __cplusplus
 +} /* extern C */
 +#endif
 --
 2.3.5

 ___
 mesa-dev mailing list
 mesa-dev@lists.freedesktop.org
 http://lists.freedesktop.org/mailman/listinfo/mesa-dev
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 09/12] nir: Add a simple growing array data structure

2015-04-22 Thread Connor Abbott
I think it would be better to call this nir_vector rather than
nir_array, since this is essentially a poor man's version of
std::vector. Is this ok with you?

On Fri, Apr 10, 2015 at 8:48 PM, Jason Ekstrand ja...@jlekstrand.net wrote:
 ---
  src/glsl/nir/nir_array.h | 96 
 
  1 file changed, 96 insertions(+)
  create mode 100644 src/glsl/nir/nir_array.h

 diff --git a/src/glsl/nir/nir_array.h b/src/glsl/nir/nir_array.h
 new file mode 100644
 index 000..1db4e8c
 --- /dev/null
 +++ b/src/glsl/nir/nir_array.h
 @@ -0,0 +1,96 @@
 +/*
 + * Copyright © 2015 Intel Corporation
 + *
 + * Permission is hereby granted, free of charge, to any person obtaining a
 + * copy of this software and associated documentation files (the Software),
 + * to deal in the Software without restriction, including without limitation
 + * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 + * and/or sell copies of the Software, and to permit persons to whom the
 + * Software is furnished to do so, subject to the following conditions:
 + *
 + * The above copyright notice and this permission notice (including the next
 + * paragraph) shall be included in all copies or substantial portions of the
 + * Software.
 + *
 + * THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
 DEALINGS
 + * IN THE SOFTWARE.
 + *
 + * Authors:
 + *Jason Ekstrand (ja...@jlekstrand.net)
 + *
 + */
 +
 +#pragma once
 +
 +#ifdef __cplusplus
 +extern C {
 +#endif
 +
 +typedef struct {
 +   void *mem_ctx;
 +   size_t size;
 +   size_t alloc;
 +   void *data;
 +} nir_array;
 +
 +static inline void
 +nir_array_init(nir_array *arr, void *mem_ctx)
 +{
 +   arr-mem_ctx = mem_ctx;
 +   arr-size = 0;
 +   arr-alloc = 0;
 +   arr-data = NULL;
 +}
 +
 +static inline void
 +nir_array_fini(nir_array *arr)
 +{
 +   if (arr-mem_ctx)
 +  ralloc_free(arr-data);
 +   else
 +  free(arr-data);
 +}
 +
 +#define NIR_ARRAY_INITIAL_SIZE 64
 +
 +/* Increments the size of the array by the given ammount and returns a
 + * pointer to the beginning of the newly added space.
 + */
 +static inline void *
 +nir_array_grow(nir_array *arr, size_t additional)
 +{
 +   size_t new_size = arr-size + additional;
 +   if (new_size  arr-alloc) {
 +  if (arr-alloc == 0)
 + arr-alloc = NIR_ARRAY_INITIAL_SIZE;
 +
 +  while (new_size  arr-alloc)
 + arr-alloc *= 2;
 +
 +  if (arr-mem_ctx)
 + arr-data = reralloc_size(arr-mem_ctx, arr-data, arr-alloc);
 +  else
 + arr-data = realloc(arr-data, arr-alloc);
 +   }
 +
 +   void *ptr = (void *)((char *)arr-data + arr-size);
 +   arr-size = new_size;
 +
 +   return ptr;
 +}
 +
 +#define nir_array_add(arr, type, elem) \
 +   *(type *)nir_array_grow(arr, sizeof(type)) = (elem)
 +
 +#define nir_array_foreach(arr, type, elem) \
 +   for (type *elem = (type *)(arr)-data; \
 +elem  (type *)((char *)(arr)-data + (arr)-size); elem++)
 +
 +#ifdef __cplusplus
 +} /* extern C */
 +#endif
 --
 2.3.5

 ___
 mesa-dev mailing list
 mesa-dev@lists.freedesktop.org
 http://lists.freedesktop.org/mailman/listinfo/mesa-dev
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 09/12] nir: Add a simple growing array data structure

2015-04-22 Thread Connor Abbott
On Wed, Apr 22, 2015 at 6:06 PM, Jason Ekstrand ja...@jlekstrand.net wrote:
 On Wed, Apr 22, 2015 at 3:03 PM, Connor Abbott cwabbo...@gmail.com wrote:
 I think it would be better to call this nir_vector rather than
 nir_array, since this is essentially a poor man's version of
 std::vector. Is this ok with you?

 I battled over that one for quite a while.  In the end, I settled on
 nir_array because NIR is a compiler IR for vector architectures and I
 was concerned that a datatype called nir_vector that was not, in fact,
 a vector in the mathematical sense would be troublesome.
 --Jason

Ugh, you're right... I guess nir_array would lead to less confusion,
even if it's not quite the name that everyone else uses.


 On Fri, Apr 10, 2015 at 8:48 PM, Jason Ekstrand ja...@jlekstrand.net wrote:
 ---
  src/glsl/nir/nir_array.h | 96 
 
  1 file changed, 96 insertions(+)
  create mode 100644 src/glsl/nir/nir_array.h

 diff --git a/src/glsl/nir/nir_array.h b/src/glsl/nir/nir_array.h
 new file mode 100644
 index 000..1db4e8c
 --- /dev/null
 +++ b/src/glsl/nir/nir_array.h
 @@ -0,0 +1,96 @@
 +/*
 + * Copyright © 2015 Intel Corporation
 + *
 + * Permission is hereby granted, free of charge, to any person obtaining a
 + * copy of this software and associated documentation files (the 
 Software),
 + * to deal in the Software without restriction, including without 
 limitation
 + * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 + * and/or sell copies of the Software, and to permit persons to whom the
 + * Software is furnished to do so, subject to the following conditions:
 + *
 + * The above copyright notice and this permission notice (including the 
 next
 + * paragraph) shall be included in all copies or substantial portions of 
 the
 + * Software.
 + *
 + * THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS 
 OR
 + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 
 OTHER
 + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
 DEALINGS
 + * IN THE SOFTWARE.
 + *
 + * Authors:
 + *Jason Ekstrand (ja...@jlekstrand.net)
 + *
 + */
 +
 +#pragma once
 +
 +#ifdef __cplusplus
 +extern C {
 +#endif
 +
 +typedef struct {
 +   void *mem_ctx;
 +   size_t size;
 +   size_t alloc;
 +   void *data;
 +} nir_array;
 +
 +static inline void
 +nir_array_init(nir_array *arr, void *mem_ctx)
 +{
 +   arr-mem_ctx = mem_ctx;
 +   arr-size = 0;
 +   arr-alloc = 0;
 +   arr-data = NULL;
 +}
 +
 +static inline void
 +nir_array_fini(nir_array *arr)
 +{
 +   if (arr-mem_ctx)
 +  ralloc_free(arr-data);
 +   else
 +  free(arr-data);
 +}
 +
 +#define NIR_ARRAY_INITIAL_SIZE 64
 +
 +/* Increments the size of the array by the given ammount and returns a
 + * pointer to the beginning of the newly added space.
 + */
 +static inline void *
 +nir_array_grow(nir_array *arr, size_t additional)
 +{
 +   size_t new_size = arr-size + additional;
 +   if (new_size  arr-alloc) {
 +  if (arr-alloc == 0)
 + arr-alloc = NIR_ARRAY_INITIAL_SIZE;
 +
 +  while (new_size  arr-alloc)
 + arr-alloc *= 2;
 +
 +  if (arr-mem_ctx)
 + arr-data = reralloc_size(arr-mem_ctx, arr-data, arr-alloc);
 +  else
 + arr-data = realloc(arr-data, arr-alloc);
 +   }
 +
 +   void *ptr = (void *)((char *)arr-data + arr-size);
 +   arr-size = new_size;
 +
 +   return ptr;
 +}
 +
 +#define nir_array_add(arr, type, elem) \
 +   *(type *)nir_array_grow(arr, sizeof(type)) = (elem)
 +
 +#define nir_array_foreach(arr, type, elem) \
 +   for (type *elem = (type *)(arr)-data; \
 +elem  (type *)((char *)(arr)-data + (arr)-size); elem++)
 +
 +#ifdef __cplusplus
 +} /* extern C */
 +#endif
 --
 2.3.5

 ___
 mesa-dev mailing list
 mesa-dev@lists.freedesktop.org
 http://lists.freedesktop.org/mailman/listinfo/mesa-dev
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 09/12] nir: Add a simple growing array data structure

2015-04-12 Thread Matt Turner
On Sun, Apr 12, 2015 at 6:38 PM, Jason Ekstrand ja...@jlekstrand.net wrote:

 On Apr 12, 2015 3:24 PM, Thomas Helland thomashellan...@gmail.com wrote:

 Hi,

 This looks correct as far as I can tell.
 I have some comments inline, but I don't feel strongly about
 either of them, so do as you please.

 Also, maybe this is a candidate for /src/util ?

 Maybe. If so I'm OK leaving it here until there are other users.

 2015-04-11 2:48 GMT+02:00 Jason Ekstrand ja...@jlekstrand.net:
  ---
   src/glsl/nir/nir_array.h | 96
  
   1 file changed, 96 insertions(+)
   create mode 100644 src/glsl/nir/nir_array.h
 
  diff --git a/src/glsl/nir/nir_array.h b/src/glsl/nir/nir_array.h
  new file mode 100644
  index 000..1db4e8c
  --- /dev/null
  +++ b/src/glsl/nir/nir_array.h
  @@ -0,0 +1,96 @@
  +/*
  + * Copyright © 2015 Intel Corporation
  + *
  + * Permission is hereby granted, free of charge, to any person
  obtaining a
  + * copy of this software and associated documentation files (the
  Software),
  + * to deal in the Software without restriction, including without
  limitation
  + * the rights to use, copy, modify, merge, publish, distribute,
  sublicense,
  + * and/or sell copies of the Software, and to permit persons to whom
  the
  + * Software is furnished to do so, subject to the following conditions:
  + *
  + * The above copyright notice and this permission notice (including the
  next
  + * paragraph) shall be included in all copies or substantial portions
  of the
  + * Software.
  + *
  + * THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND,
  EXPRESS OR
  + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  MERCHANTABILITY,
  + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT
  SHALL
  + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
  OTHER
  + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  ARISING
  + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  DEALINGS
  + * IN THE SOFTWARE.
  + *
  + * Authors:
  + *Jason Ekstrand (ja...@jlekstrand.net)
  + *
  + */
  +
  +#pragma once
  +
  +#ifdef __cplusplus
  +extern C {
  +#endif
  +
  +typedef struct {
  +   void *mem_ctx;
  +   size_t size;
  +   size_t alloc;

 Maybe alloced or alloced_mem instead?
 I was a bit puzzled initially about its purpose.

 Sure

FWIW, I use length and size for these two things.
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 09/12] nir: Add a simple growing array data structure

2015-04-12 Thread Jason Ekstrand
On Apr 12, 2015 3:24 PM, Thomas Helland thomashellan...@gmail.com wrote:

 Hi,

 This looks correct as far as I can tell.
 I have some comments inline, but I don't feel strongly about
 either of them, so do as you please.

 Also, maybe this is a candidate for /src/util ?

Maybe. If so I'm OK leaving it here until there are other users.

 2015-04-11 2:48 GMT+02:00 Jason Ekstrand ja...@jlekstrand.net:
  ---
   src/glsl/nir/nir_array.h | 96

   1 file changed, 96 insertions(+)
   create mode 100644 src/glsl/nir/nir_array.h
 
  diff --git a/src/glsl/nir/nir_array.h b/src/glsl/nir/nir_array.h
  new file mode 100644
  index 000..1db4e8c
  --- /dev/null
  +++ b/src/glsl/nir/nir_array.h
  @@ -0,0 +1,96 @@
  +/*
  + * Copyright © 2015 Intel Corporation
  + *
  + * Permission is hereby granted, free of charge, to any person
obtaining a
  + * copy of this software and associated documentation files (the
Software),
  + * to deal in the Software without restriction, including without
limitation
  + * the rights to use, copy, modify, merge, publish, distribute,
sublicense,
  + * and/or sell copies of the Software, and to permit persons to whom
the
  + * Software is furnished to do so, subject to the following conditions:
  + *
  + * The above copyright notice and this permission notice (including
the next
  + * paragraph) shall be included in all copies or substantial portions
of the
  + * Software.
  + *
  + * THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR
  + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY,
  + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT
SHALL
  + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES
OR OTHER
  + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING
  + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS
  + * IN THE SOFTWARE.
  + *
  + * Authors:
  + *Jason Ekstrand (ja...@jlekstrand.net)
  + *
  + */
  +
  +#pragma once
  +
  +#ifdef __cplusplus
  +extern C {
  +#endif
  +
  +typedef struct {
  +   void *mem_ctx;
  +   size_t size;
  +   size_t alloc;

 Maybe alloced or alloced_mem instead?
 I was a bit puzzled initially about its purpose.

Sure

  +   void *data;
  +} nir_array;
  +
  +static inline void
  +nir_array_init(nir_array *arr, void *mem_ctx)
  +{
  +   arr-mem_ctx = mem_ctx;
  +   arr-size = 0;
  +   arr-alloc = 0;
  +   arr-data = NULL;
  +}
  +
  +static inline void
  +nir_array_fini(nir_array *arr)
  +{
  +   if (arr-mem_ctx)
  +  ralloc_free(arr-data);
  +   else
  +  free(arr-data);
  +}
  +
  +#define NIR_ARRAY_INITIAL_SIZE 64
  +
  +/* Increments the size of the array by the given ammount and returns a
  + * pointer to the beginning of the newly added space.
  + */

 A nit, but s/ammount/amount.

Yup

 Maybe also mention that we allocate memory in 2^n increments?

Meh.  I do that because I happen to think it's nice but it's not at all a
requirement.

  +static inline void *
  +nir_array_grow(nir_array *arr, size_t additional)
  +{
  +   size_t new_size = arr-size + additional;
  +   if (new_size  arr-alloc) {
  +  if (arr-alloc == 0)
  + arr-alloc = NIR_ARRAY_INITIAL_SIZE;
  +
  +  while (new_size  arr-alloc)
  + arr-alloc *= 2;
  +
  +  if (arr-mem_ctx)
  + arr-data = reralloc_size(arr-mem_ctx, arr-data,
arr-alloc);
  +  else
  + arr-data = realloc(arr-data, arr-alloc);

 Probably should handle failure to allocate and return NULL?

Doesn't hurt. I can do that.

  +   }
  +
  +   void *ptr = (void *)((char *)arr-data + arr-size);
  +   arr-size = new_size;
  +
  +   return ptr;
  +}
  +
  +#define nir_array_add(arr, type, elem) \
  +   *(type *)nir_array_grow(arr, sizeof(type)) = (elem)
  +
  +#define nir_array_foreach(arr, type, elem) \
  +   for (type *elem = (type *)(arr)-data; \
  +elem  (type *)((char *)(arr)-data + (arr)-size); elem++)
  +
  +#ifdef __cplusplus
  +} /* extern C */
  +#endif
  --
  2.3.5
 
  ___
  mesa-dev mailing list
  mesa-dev@lists.freedesktop.org
  http://lists.freedesktop.org/mailman/listinfo/mesa-dev
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev