<div dir="ltr">On 28 January 2013 09:00, Brian Paul <span dir="ltr"><<a href="mailto:brian.e.paul@gmail.com" target="_blank">brian.e.paul@gmail.com</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">On Mon, Jan 28, 2013 at 9:17 AM, Marek Olšák <<a href="mailto:maraeo@gmail.com">maraeo@gmail.com</a>> wrote:<br>

> On Mon, Jan 28, 2013 at 4:54 PM, Brian Paul <<a href="mailto:brianp@vmware.com">brianp@vmware.com</a>> wrote:<br>
>> [cross-posting this reply to the mesa-dev list]<br>
>><br>
>><br>
>> On 01/27/2013 09:07 AM, Brian Paul wrote:<br>
>>><br>
>>> On Sun, Jan 27, 2013 at 2:51 AM, Eric Anholt<<a href="mailto:eric@anholt.net">eric@anholt.net</a>>  wrote:<br>
>>>><br>
>>>> Brian Paul<<a href="mailto:brianp@vmware.com">brianp@vmware.com</a>>  writes:<br>
>>>><br>
>>>>> Even if GL_ARB_multisample is advertised, it's OK for the max number of<br>
>>>>> samples to be zero.<br>
>>>><br>
>>>><br>
>>>> Huh?  The EXT_framebuffer_multisample spec says minmax of MAX_SAMPLES is<br>
>>>> 1.<br>
>>><br>
>>><br>
>>> And GL_ARB_framebuffer_object says it's zero.<br>
>>><br>
>>> It looks like the piglit test is checking the wrong extension.  At<br>
>>> line 364 we're calling<br>
>>> piglit_require_extension("GL_ARB_framebuffer_object").  I don't see<br>
>>> any checks for GL_EXT_framebuffer_multisample.  I was looking at<br>
>>> GL_MAX_SAMPLES in the former, not the later.<br>
>>><br>
>>> I guess the proper fix is to just check for the proper extension.<br>
>><br>
>><br>
>><br>
>> There's several things going on here.<br>
>><br>
>> First, the piglit test needs a<br>
>> piglit_require_extension("GL_EXT_framebuffer_multisample") check.<br>
>><br>
>> Second, I think we need to disable advertising this extension for swrast,<br>
>> softpipe and llvmpipe.<br>
>><br>
>> Third, I think we need to decide what GL_MAX_SAMPLES=1 really means.<br>
>><br>
>> I've been reading the various multisample-related extensions and none of<br>
>> them really says anything special about GL_MAX_SAMPLES=1.  But in some<br>
>> places (like the GLSL spec) you'll see the phrase "single-sampling" but it<br>
>> seems to mean the non-multisample / conventional rasterization case.<br>
>><br>
>> My thinking is that it would be theoretically possible to have single-sample<br>
>> multisampling (perhaps with a different sample position per pixel).<br>
>><br>
>> In any case, regardless of the number of samples per pixel, we still must<br>
>> obey centroid sampling mode (must interpolate at a point that lies in both<br>
>> the pixel and in the primitive being<br>
>> rendered).  swrast, softpipe and llvmpipe don't support that so we really<br>
>> shouldn't advertise GL_MAX_SAMPLES=1 (it should be zero) so<br>
>> GL_EXT_framebuffer_multisample shouldn't be advertised for those drivers.<br>
>><br>
>> Most likely, the user's going to be disappointed if they want multisampling<br>
>> in their app and the driver only gives him GL_MAX_SAMPLES=1.<br>
>><br>
>> Does this sound reasonable?<br>
><br>
> I think that not advertising ARB_framebufer_object (which adds<br>
> GL_MAX_SAMPLES) is a much worse solution than returning GL_MAX_SAMPLES<br>
> <= 1.<br>
<br>
</div></div>Huh?  I wasn't suggesting disabling GL_ARB_framebuffer_object.  I'm<br>
saying advertise GL_MAX_SAMPLES=0 and disable<br>
GL_EXT_framebuffer_multisample in the software drivers.<br></blockquote><div><br></div><div>This seems reasonable to me.  We have a similar situation in the i965 driver, since we only support multisampling on Gen6 and above, and what we currently do in that situation is kind of hokey (we advertise GL_EXT_framebuffer_multisample and set GL_MAX_SAMPLES=1, but then when the app calls glRenderbufferStorage(samples=1), we turn around and give them a single-sampled buffer).  I much prefer Brian's solution.<br>
<br>I'll make a patch that modifies the i965 driver to do this too.<br><br></div><div>Paul<br></div></div></div></div>