[virglrenderer-devel] [PATCH] expand gl_SampleMask to ivec4 to match TGSI definition
Dave Airlie
airlied at gmail.com
Fri Jul 6 07:05:06 UTC 2018
On 6 July 2018 at 17:00, Erik Faye-Lund <erik.faye-lund at collabora.com> wrote:
>
> On 06. juli 2018 02:12, Dave Airlie wrote:
>>
>> On 5 July 2018 at 17:43, Erik Faye-Lund<erik.faye-lund at collabora.com>
>> wrote:
>>>
>>> TGSI defines TGSI_SEMANTIC_SAMPLEMASK to be a four-compoent integer
>>> vector, with the x component set to the same value as gl_SampleMask,
>>> and the y, z and w components set to 0.
>>
>> I think the other patch was more correct, the value is SV[0].xxxx, which
>> means
>> it's swizzled X into all 4 components.
>>
>
> I don't think so. Here's what the documentation says:
>
> https://gitlab.freedesktop.org/mesa/mesa/blob/master/src/gallium/docs/source/tgsi.rst#L3239
>
> "If MSAA is not enabled, the value is (1, 0, 0, 0).
>
> For an output, the sample mask is used to disable further sample processing.
>
> For both, the register type is uint[4] but only the X component is used
> (i.e. gl_SampleMask[0])."
>
> If we repeat the same value to all components, we don't fulfill the
> (1, 0, 0, 0)-bit.
>
> So I think this is a more accurate implementation than repeating, even
> though
> it *probably* doesn't matter much, as I think only hand-written TGSI shaders
> can actually reach the other components. And I seriously doubt we have any
> hand-written TGSI that cases about the distinction...
Nope you are still not getting it :-)
SV[0].xyzw is a 4 component looking like "gl_SampleMask[0], 0,0,0"
SV[0].xxxx is what we see which is "gl_SampleMask[0],
gl_SampleMask[0], gl_SampleMask[0], gl_SampleMask[0]"
The swizzling matters here.
Now we actually are probably wrong in a fair few cases for system
values as I've tended towards what works
instead of doing it properly.
We should probably construct a full explicit vec4 using the swizzles
to work out each value, instead of the
lazy (uvec4(gl_SampleMask[0])) we do now, though we coould also detect
a .xxxx swizzle and just do that,
and have a backup for the non .xxxx cases.
Dave.
More information about the virglrenderer-devel
mailing list