[Mesa-dev] [PATCH] drirc: Disable ARB_blend_func_extended for Heaven 4.0/Valley 1.0.

Kenneth Graunke kenneth at whitecape.org
Tue Dec 29 12:34:37 PST 2015


On Tuesday, December 29, 2015 6:42:58 PM PST Marek Olšák wrote:
> On Mon, Dec 28, 2015 at 11:28 PM, Kenneth Graunke <kenneth at whitecape.org> 
wrote:
> > Unigine Heaven 4.0 and Valley 1.0 use dual color blending but don't
> > specify which fragment shader output is which, so there's at best a
> > 50/50 chance of us guessing it correctly.  This is invalid.
> > 
> > Unigine fixed this in 4.1 and 1.1 versions over a year and a half ago,
> > but hasn't actually released them for whatever reason.  So, add the
> > workaround back so that it works for most people.
> > 
> > Fixes Heaven 4.0/Valley 1.0 rendering on Ivybridge.  For whatever
> > reason, Broadwell worked.  4.1 and 1.1 have always worked.
> > 
> > Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92233
> > Cc: mesa-stable at lists.freedesktop.org
> > Cc: Marek Olšák <marek.olsak at amd.com>
> 
> Hi Ken,
> 
> We've never had a problem with this in gallium, but if it's just luck,
> I suppose it's okay to add the workaround.
> 
> In Gallium, the second color output is the same as gl_FragData[1], so
> it doesn't matter how the location is specified as long as it's clear
> which output goes second.
> 
> How difficult is it to be unlucky here? Does it depend on IR node ordering?
> 
> Reviewed-by: Marek Olšák <marek.olsak at amd.com>
> 
> Marek

Their shader has two ordinary user-defined outputs:

   out vec4 s_frag_data_0;
   out vec4 s_frag_data_1;

But they don't call glFragDataLocationIndexed() to define which output
variable is color 0 and which is color 1.  Nor do they use a layout
qualifier.  So, both variables end up with var->data.index == 0.
Which means they've told us both outputs are SRC0, and there isn't a SRC1.

We could guess based on the variable ordering - s_frag_data_0 happens
to be first (unless we reorder the IR nodes for some reason).  Or, we
could guess based on the variable names.

It's been 2.5 years since I first debugged this, so I don't recall
what the location field was set to.  If they set it to N and N + 1,
we could assume that they meant color index 0/1 based on that.  If it's
the same, we're out of luck.  (In GL, location is *supposed* to mean
the render target index, because you can in theory do MRT and dual
source blending together.  But, nobody's hardware does, AFAIK.)

--Ken
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20151229/446af646/attachment.sig>


More information about the mesa-dev mailing list