vc4: fix vc4_resource_from_handle() stride calculation
authorRob Herring <robh@kernel.org>
Tue, 14 Jun 2016 21:17:44 +0000 (16:17 -0500)
committerEric Anholt <eric@anholt.net>
Wed, 15 Jun 2016 21:54:38 +0000 (14:54 -0700)
The expected stride calculation is completely wrong. It should
ultimately be multiplying cpp and width rather than dividing. The width
also needs to be aligned to the tiling width first before converting to
stride bytes.

The whole stride check here is possibly pointless. Any buffers which
were allocated outside of vc4 may have strides with larger alignment
requirements.

Signed-off-by: Rob Herring <robh@kernel.org>
Reviewed-by: Eric Anholt <eric@anholt.net>
src/gallium/drivers/vc4/vc4_resource.c

index 20f137a8e17458be7d3fe14e4bbb27bb67b570e2..aabe59352f630eb1d7b9a5413f3872d0361eca53 100644 (file)
@@ -534,8 +534,8 @@ vc4_resource_from_handle(struct pipe_screen *pscreen,
         struct vc4_resource *rsc = vc4_resource_setup(pscreen, tmpl);
         struct pipe_resource *prsc = &rsc->base.b;
         struct vc4_resource_slice *slice = &rsc->slices[0];
-        uint32_t expected_stride = align(prsc->width0 / rsc->cpp,
-                                         vc4_utile_width(rsc->cpp));
+        uint32_t expected_stride =
+            align(prsc->width0, vc4_utile_width(rsc->cpp)) * rsc->cpp;
 
         if (!rsc)
                 return NULL;