[Mesa-dev] [PATCH] i965: allow unsourced enabled VAO

Samuel Iglesias Gonsálvez siglesias at igalia.com
Wed Dec 21 10:52:32 UTC 2016


Reviewed-by: Samuel Iglesias Gonsálvez <siglesias at igalia.com>

On Thu, 2016-11-03 at 11:02 +0100, Juan A. Suarez Romero wrote:
> The GL 4.5 spec says:
>     "If any enabled array’s buffer binding is zero when DrawArrays
>     or one of the other drawing commands defined in section 10.4 is
>     called, the result is undefined."
> 
> This commits avoids crashing the code, which is not a very good
> "undefined result".
> 
> This fixes spec/!opengl 3.1/vao-broken-attrib piglit test.
> ---
>  src/mesa/drivers/dri/i965/brw_draw_upload.c | 23 ++++++++++++++++---
> ----
>  1 file changed, 16 insertions(+), 7 deletions(-)
> 
> diff --git a/src/mesa/drivers/dri/i965/brw_draw_upload.c
> b/src/mesa/drivers/dri/i965/brw_draw_upload.c
> index ab2fc50..3925b6e 100644
> --- a/src/mesa/drivers/dri/i965/brw_draw_upload.c
> +++ b/src/mesa/drivers/dri/i965/brw_draw_upload.c
> @@ -421,13 +421,22 @@ copy_array_to_vbo_array(struct brw_context
> *brw,
>     uint8_t *dst = intel_upload_space(brw, size, dst_stride,
>                                       &buffer->bo, &buffer->offset);
>  
> -   if (dst_stride == src_stride) {
> -      memcpy(dst, src, size);
> -   } else {
> -      while (count--) {
> -	 memcpy(dst, src, dst_stride);
> -	 src += src_stride;
> -	 dst += dst_stride;
> +   /* The GL 4.5 spec says:
> +    *      "If any enabled array’s buffer binding is zero when
> DrawArrays or
> +    *      one of the other drawing commands defined in section 10.4
> is called,
> +    *      the result is undefined."
> +    *
> +    * In this case, let's the dst with undefined values
> +    */
> +   if (src != NULL) {
> +      if (dst_stride == src_stride) {
> +         memcpy(dst, src, size);
> +      } else {
> +         while (count--) {
> +            memcpy(dst, src, dst_stride);
> +            src += src_stride;
> +            dst += dst_stride;
> +         }
>        }
>     }
>     buffer->stride = dst_stride;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: This is a digitally signed message part
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20161221/2681bbca/attachment.sig>


More information about the mesa-dev mailing list