<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, May 7, 2018 at 8:02 AM, Alejandro Piñeiro <span dir="ltr"><<a href="mailto:apinheiro@igalia.com" target="_blank">apinheiro@igalia.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Jason,<br>
<br>
as part of the ARB_gl_spirv work, we are doing the linking based on the<br>
nir shader that comes from spirv_to_nir. On some cases,<br>
nir_lower_wpos_ytransform introduces a new uniform,<br>
"gl_FbWposYTransform". So as the uniform is there when we start to do<br>
the linking, it is treated as any other uniform, being added to the<br>
UniformStorage, accessible through the OpenGL API and so on. Something<br>
that I understand that we don't want. On GLSL this is not a problem<br>
because the linking is done based on MESA/IR, then the IR is converted<br>
to NIR, and the lowering adds the uniform based on the NIR shader,<br>
really after the linking.<br>
<br>
The first solution I thought was just mark the uniform with a special<br>
location [1]. It would need to be a negative value, not -1 that is<br>
already reserved for not-assigned locations (we still have some cases<br>
for those, even if in general ARB_gl_spirv makes explicit location<br>
mandatory). So it would be a new negative value, like lets say -5. So<br>
then on the linking, if the uniform location has this value, the uniform<br>
is skipped.<br>
<br>
After checking that this solution worked (although I only tested with<br>
some tests), I started to search for an alternative, as this solution<br>
seemed too hacky.</blockquote><div><br></div><div>It does seem a bit hacky, yes.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">But this lowering needs to be run before nir_lower_io,<br>
and nir_lower_io is part of the uniform lowering. So I didn't see really<br>
reasonable to do a nir_lower_io without nir_lower_wpos_ytransform, do<br>
the linking, and then execute again nir_lower_io/nir_lower_wpos_<wbr>transform.<br>
</blockquote></div><br></div><div class="gmail_extra">This is all a bit sticky.  One observation is that the newly added uniform makes usage of the token system.  Are tokens no longer used with SPIR-V?  I guess they are kind-of an old mechanism to handle the crufty ARB program parameters.  However, you could have -5 mean "It uses a token"<br><br>Another option would be to use a system value instead of a uniform.  We can then convert it to a uniform in the back-end.  We have a few places where we do things like this for compute shaders.<br><br></div><div class="gmail_extra">I don't have a lot of good ideas or strong opinions, I'm afraid. :-(  Maybe Ken has some?<br><br></div><div class="gmail_extra">--Jason<br></div></div>