[Mesa-dev] [PATCH] glsl/ast: don't allow subroutine uniform comparisons
Ian Romanick
idr at freedesktop.org
Tue Jul 19 20:45:23 UTC 2016
On 07/19/2016 06:54 AM, Andres Gomez wrote:
> Hi,
>
> Just dropped:
> https://lists.freedesktop.org/archives/mesa-dev/2016-July/123485.html
>
> I didn't realize there was already this thread open.
>
> On Tue, 2016-06-07 at 09:59 -0700, Ian Romanick wrote:
>> On 06/06/2016 10:20 PM, Dave Airlie wrote:
>>> From: Dave Airlie <airlied at redhat.com>
>>>
>>> This fixes:
>>> GL45-CTS.shader_subroutine.subroutines_cannot_be_assigned_float_int_values_or_be_compared
>>>
>>> though I'm not 100% sure why this is illegal from the spec,
>>> but it makes us pass the test, and I really can't see a use case for this.
>>
>> I think the test is wrong. Section 5.9 (Expressions) of the GLSL 4.5
>> spec clearly says:
>>
>> The equality operators equal (==), and not equal (!=) operate on
>> all types (except aggregates that contain opaque types).
>
> In my opinion, the specs are somehow contradictory or not completely
> clear.
>
> AFAIU, subroutine variables are to be used just in the way functions
> are called. Although the spec doesn't say it explicitly, this means
> that these variables are not to be used in any other way than those
> left for function calls. Therefore, a comparison between 2 subroutine
> variables should also cause a compilation error.
>
> From The OpenGLĀ® Shading Language 4.40, page 117:
>
> " To use subroutines, a subroutine type is declared, one or more
> functions are associated with that subroutine type, and a
> subroutine variable of that type is declared. The function
> currently assigned to the variable function is then called by
> using function calling syntax replacing a function name with the
> name of the subroutine variable. Subroutine variables are
> uniforms, and are assigned to specific functions only through
> commands (UniformSubroutinesuiv) in the OpenGL API."
>
> From The OpenGLĀ® Shading Language 4.40, page 118:
>
> " Subroutine uniform variables are called the same way functions
> are called. When a subroutine variable (or an element of a
> subroutine variable array) is associated with a particular
> function, all function calls through that variable will call that
> particular function."
>
>> As much as anyone would use subroutines, you could imagine this being
>> used like:
>>
>> value = foo(param1, param2);
>> if (foo != bar)
>> value += bar(param1, param2);
>
> If that would be the case, and we agree that subroutines can be
> compared, then we have, at least, some other bug to correct.
>
> I've made some piglit tests with the following scenarios:
> * == comparison result:
> * foo and bar point to the same subroutine function -> false
> * foo and bar point to different subroutine functions -> false
> * != comparison result:
> * foo and bar point to the same subroutine function -> false
> * foo and bar point to different subroutine functions -> false
>
> So, what would be the conclusion? Do we allow subroutine variables comparison?
There is no conclusion yet. I opened a Khronos gitlab tracker (right
after Dave sent his original patch) for the CTS. I'll try to get it on
the conference call agenda for this week.
> FTR, I passed this patch through an "all" piglit run and through GL44 CTS and it doesn't cause any regression.
More information about the mesa-dev
mailing list