llvmpipe/draw: fix image sizes for vertex/geometry shaders.
authorDave Airlie <airlied@redhat.com>
Wed, 9 Oct 2019 04:13:19 +0000 (14:13 +1000)
committerDave Airlie <airlied@linux.ie>
Thu, 10 Oct 2019 21:52:20 +0000 (21:52 +0000)
since images are a single level, minify before passing the w/h
to draw.

Fixes: KHR-GLES31.core.shader_image_size.basic-nonMS-vs-*
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
src/gallium/drivers/llvmpipe/lp_state_sampler.c

index 36159a363f42e74e4a66a5d0728907074ca7ecbf..0428b5cd2c53caa457d3c17b4f4883029e5997c8 100644 (file)
@@ -386,7 +386,8 @@ prepare_shader_images(
          if (!img)
             continue;
 
-         unsigned width0 = img->width0;
+         unsigned width = u_minify(img->width0, view->u.tex.level);
+         unsigned height = u_minify(img->height0, view->u.tex.level);
          unsigned num_layers = img->depth0;
 
          if (!lp_img->dt) {
@@ -419,7 +420,7 @@ prepare_shader_images(
                img_stride = 0;
 
                /* everything specified in number of elements here. */
-               width0 = view->u.buf.size / view_blocksize;
+               width = view->u.buf.size / view_blocksize;
                addr = (uint8_t *)addr + view->u.buf.offset;
                assert(view->u.buf.offset + view->u.buf.size <= res->width0);
             }
@@ -440,7 +441,7 @@ prepare_shader_images(
          draw_set_mapped_image(lp->draw,
                                shader_type,
                                i,
-                               width0, img->height0, num_layers,
+                               width, height, num_layers,
                                addr,
                                row_stride, img_stride);
       }