<div dir="ltr">On 28 May 2013 15:55, Eric Anholt <span dir="ltr"><<a href="mailto:eric@anholt.net" target="_blank">eric@anholt.net</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="HOEnZb"><div class="h5">Chad Versace <<a href="mailto:chad.versace@linux.intel.com">chad.versace@linux.intel.com</a>> writes:<br>
<br>
> On 05/28/2013 01:54 PM, Eric Anholt wrote:<br>
>> Marek Olšák <<a href="mailto:maraeo@gmail.com">maraeo@gmail.com</a>> writes:<br>
>><br>
>>> CopyTexSubImage can be called on a multisample renderbuffer if the<br>
>>> renderbuffer is part of the window-system framebuffer (i.e. comes from<br>
>>> the visual).<br>
>>><br>
>>> IIRC, the game Cogs uses it if both MSAA and Post Filters are enabled.<br>
>><br>
>> Good to note; I hadn't thought about this.  This should be covered by<br>
>> the blorp CTSI path, but at least we'll find out more obviously now if<br>
>> that turns out to be false for some reason.<br></div></div></blockquote><div><br></div><div>Actually, the blorp CTSI path doesn't cover the case where the texture and the renderbuffer have different color formats, so these assertions fire in the Piglit "copyteximage" tests.<br>
<br>There are several other bugs in the intel implementation of glCopyTexSubImage which are exposed by those Piglit tests--I'm just about to publish a patch series that gets them to pass again.  I'll include fixing the assertions in that patch series.<br>
</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">
><br>
> --- -8<- ----<br>
> static void<br>
> intelCopyTexSubImage(struct gl_context *ctx, GLuint dims,<br>
>                       struct gl_texture_image *texImage,<br>
>                       GLint xoffset, GLint yoffset, GLint zoffset,<br>
>                       struct gl_renderbuffer *rb,<br>
>                       GLint x, GLint y,<br>
>                       GLsizei width, GLsizei height)<br>
> {<br>
>     struct intel_context *intel = intel_context(ctx);<br>
>     if (dims != 3) {<br>
> #ifndef I915<br>
>        /* Try BLORP first.  It can handle almost everything. */<br>
>        if (brw_blorp_copytexsubimage(intel, rb, texImage, x, y,<br>
>                                      xoffset, yoffset, width, height))<br>
>           return;<br>
> #endif<br>
><br>
>        /* Next, try the BLT engine. */<br>
>        if (intel_copy_texsubimage(intel,<br>
>                                   intel_texture_image(texImage),<br>
>                                   xoffset, yoffset,<br>
>                                   intel_renderbuffer(rb), x, y, width, height))<br>
>           return;<br>
>     }<br>
> --- ->8- ----<br>
><br>
> If the read buffer is multi-sampled and brw_blorp_copytexsubimage fails for an<br>
> unexpected reason, then the assertions fail. To avoid that disaster, I think<br>
> the assertions should be replaced with `if (is_multisampled) return false`.<br>
<br>
</div></div>The code that gets called after that will also be a trainwreck in the<br>
presence of multisampling.  You really want to assert at this point.<br>
<br>_______________________________________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/mesa-dev" target="_blank">http://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>
<br></blockquote></div><br></div></div>