i965: verify format width in blorp_get_client_bo
authorMarcin Ślusarz <marcin.slusarz@intel.com>
Thu, 30 Jul 2020 12:56:44 +0000 (14:56 +0200)
committerMarge Bot <eric+marge@anholt.net>
Wed, 2 Sep 2020 15:08:01 +0000 (15:08 +0000)
Coverity complains about possible "Division or modulo by zero".

Signed-off-by: Marcin Ślusarz <marcin.slusarz@intel.com>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6126>

src/mesa/drivers/dri/i965/brw_blorp.c

index c2225b390fd3cf4a516c9b1eb6793afeb4b6183f..76471f5e3e8084801e00893b8820e7cd698434f3 100644 (file)
@@ -853,7 +853,6 @@ blorp_get_client_bo(struct brw_context *brw,
                                                    format, type,
                                                    d - 1, h - 1, w);
    const uint32_t stride = _mesa_image_row_stride(packing, w, format, type);
                                                    format, type,
                                                    d - 1, h - 1, w);
    const uint32_t stride = _mesa_image_row_stride(packing, w, format, type);
-   const uint32_t cpp = _mesa_bytes_per_pixel(format, type);
    const uint32_t size = last_pixel - first_pixel;
 
    *row_stride_out = stride;
    const uint32_t size = last_pixel - first_pixel;
 
    *row_stride_out = stride;
@@ -861,9 +860,15 @@ blorp_get_client_bo(struct brw_context *brw,
 
    if (packing->BufferObj) {
       const uint32_t offset = first_pixel + (intptr_t)pixels;
 
    if (packing->BufferObj) {
       const uint32_t offset = first_pixel + (intptr_t)pixels;
-      if (!read_only && ((offset % cpp) || (stride % cpp))) {
-         perf_debug("Bad PBO alignment; fallback to CPU mapping\n");
-         return NULL;
+
+      if (!read_only) {
+         const int32_t cpp = _mesa_bytes_per_pixel(format, type);
+         assert(cpp > 0);
+
+         if ((offset % cpp) || (stride % cpp)) {
+            perf_debug("Bad PBO alignment; fallback to CPU mapping\n");
+            return NULL;
+         }
       }
 
       /* This is a user-provided PBO. We just need to get the BO out */
       }
 
       /* This is a user-provided PBO. We just need to get the BO out */