ilo: assert core objects are zero-initialized
authorChia-I Wu <olvaffe@gmail.com>
Fri, 22 May 2015 05:49:20 +0000 (13:49 +0800)
committerChia-I Wu <olvaffe@gmail.com>
Sun, 14 Jun 2015 07:43:20 +0000 (15:43 +0800)
Core objects are usually embedded inside calloc()'ed objects and we expect
them to be zero-initialized.

src/gallium/drivers/ilo/core/ilo_buffer.h
src/gallium/drivers/ilo/core/ilo_builder.c
src/gallium/drivers/ilo/core/ilo_debug.h
src/gallium/drivers/ilo/core/ilo_dev.c
src/gallium/drivers/ilo/core/ilo_fence.h
src/gallium/drivers/ilo/core/ilo_image.c

index 50f97d10bd71345e8015ab212eac560b495d2e24..13e5ce270d6eb8d6688af6fddcc9b73772bf2295 100644 (file)
@@ -31,6 +31,7 @@
 #include "intel_winsys.h"
 
 #include "ilo_core.h"
+#include "ilo_debug.h"
 #include "ilo_dev.h"
 
 struct ilo_buffer {
@@ -43,6 +44,8 @@ static inline void
 ilo_buffer_init(struct ilo_buffer *buf, const struct ilo_dev *dev,
                 unsigned size, uint32_t bind, uint32_t flags)
 {
+   assert(ilo_is_zeroed(buf, sizeof(*buf)));
+
    buf->bo_size = size;
 
    /*
index 3c5eef9bcbc5b24d0cc746453f17662670362a10..4e05a3aca1e6e6fb154662943b25cc4db75ba47b 100644 (file)
@@ -333,7 +333,7 @@ ilo_builder_init(struct ilo_builder *builder,
 {
    int i;
 
-   memset(builder, 0, sizeof(*builder));
+   assert(ilo_is_zeroed(builder, sizeof(*builder)));
 
    builder->dev = dev;
    builder->winsys = winsys;
index d9c460498ff1fd656fe75a1c114398112b1e2fde..9833233d7964b75beae5a7eb1ffc0d57b7f8bf90 100644 (file)
@@ -100,4 +100,21 @@ ilo_warn(const char *format, ...)
 #endif
 }
 
+static inline bool
+ilo_is_zeroed(const void *ptr, size_t size)
+{
+#ifdef DEBUG
+   size_t i;
+
+   for (i = 0; i < size; i++) {
+      if (*((const char *) ptr) != 0)
+         return false;
+   }
+
+   return true;
+#else
+   return true;
+#endif
+}
+
 #endif /* ILO_DEBUG_H */
index 7a774fa1591a07e0c7ac4631c0aa5f886dcbc751..c2cdad72d1aadaa071ddbdffd9534eb6bee4b177 100644 (file)
@@ -40,6 +40,8 @@ ilo_dev_init(struct ilo_dev *dev, struct intel_winsys *winsys)
 {
    const struct intel_winsys_info *info;
 
+   assert(ilo_is_zeroed(dev, sizeof(*dev)));
+
    info = intel_winsys_get_info(winsys);
 
    dev->winsys = winsys;
index 00d555aa95be334b4a7e703b0be10d1610fdaa8a..b0b3c061dbce89094952a432e0caeaf659dad969 100644 (file)
@@ -31,6 +31,7 @@
 #include "intel_winsys.h"
 
 #include "ilo_core.h"
+#include "ilo_debug.h"
 #include "ilo_dev.h"
 
 struct ilo_fence {
@@ -40,7 +41,7 @@ struct ilo_fence {
 static inline void
 ilo_fence_init(struct ilo_fence *fence, const struct ilo_dev *dev)
 {
-   /* no-op */
+   assert(ilo_is_zeroed(fence, sizeof(*fence)));
 }
 
 static inline void
index 22c8ef2620ad518928fa6d726bda2437bd712b2b..240595992bf930e3a94258e79856bfb517dd4ca9 100644 (file)
@@ -1386,6 +1386,8 @@ void ilo_image_init(struct ilo_image *img,
    struct ilo_image_params params;
    bool transfer_only;
 
+   assert(ilo_is_zeroed(img, sizeof(*img)));
+
    /* use transfer layout when the texture is never bound to GPU */
    transfer_only = !(templ->bind & ~(PIPE_BIND_TRANSFER_WRITE |
                                      PIPE_BIND_TRANSFER_READ));
@@ -1411,6 +1413,8 @@ ilo_image_init_for_imported(struct ilo_image *img,
 {
    struct ilo_image_params params;
 
+   assert(ilo_is_zeroed(img, sizeof(*img)));
+
    if ((tiling == GEN6_TILING_X && bo_stride % 512) ||
        (tiling == GEN6_TILING_Y && bo_stride % 128) ||
        (tiling == GEN8_TILING_W && bo_stride % 64))