Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Accurately handle the copy filter and gamma for EFB and XFB copies #10466

Merged
merged 11 commits into from Jul 17, 2022

Conversation

Pokechu22
Copy link
Contributor

@Pokechu22 Pokechu22 commented Feb 19, 2022

This PR increases the accuracy of the way the copy filter works, rounding in the same way and emulating an unusual overflow behavior I found in testing. It also implements the gamma option for EFB copies (before, it was only handled with XFB copies). Everything matches the result of dolphin-emu/hwtests#44.

This PR is based on #10439, so fifoci will provide a diff compared to that currently. The actual implementation from that PR isn't directly relevant anymore, though. This PR replaces #10439; however, I do recommend looking at #10439 (comment) for a somewhat more visual representation of how rounding matters here.

Note that apart from one intensity-format related change, the software renderer has not been updated; it didn't receive the earlier copy filter update either. This is simply because I don't want to deal with its texture encoding code currently; it will eventually be handled in a later pull request. However, that intensity format change does result in large numbers of differences because it also applies to XFB copies (which was not the case for other backends, as the other backends don't use the encoded XFB for rendering in most cases but instead use an RGB version of it).

@JMC47
Copy link
Contributor

JMC47 commented Apr 14, 2022

Is this ready to go at this point?

@Pokechu22
Copy link
Contributor Author

It could probably use a review just for code quality, but it's passed all of my hardware tests. (The hardware tests themselves also need to be merged at some point, but they're finished apart from a review.)

@Pokechu22
Copy link
Contributor Author

Pokechu22 commented Apr 16, 2022

I've fixed a few issues and re-tested it with all backends.

  • The XFB path for TextureConverterShaderGen used float3(texcol_raw.rgb / 255.0) before; I've changed it to float3(texcol_raw.rgb) / 255.0 as OGL didn't like it.
  • I previously had a separate function that added the const float4 y_const = float4( 66, 129, 25, 16); and similar constants at the global level for TextureConverterShaderGen, since it's used by both XFB and intensity formats. However, that broke on D3D11, as for some reason dot(y_const, float4(texcol_raw.rgb, 256)) always produced 0 - I don't know why that was happening; it might be a shader compiler bug. Moving these into the same function fixes it (though it also means the constants are duplicated in two places, although that's only at the source level; it'll only show up in at most one place in the generated shader).

I also attempted to use z-textures to test depth copies (as Phire suggested), and the WIP version of my hardware test passes perfectly on Dolphin, but fails on real hardware (the depth value isn't written at all, regardless of whether z-textures are enabled or not). I'm probably doing something wrong in the test, but that does indicate that a (probably unrelated) feature is being emulated incorrectly. The test has been fixed, see dolphin-emu/hwtests#44 (comment)

@Pokechu22 Pokechu22 force-pushed the efb-copy-gamma branch 2 times, most recently from a116055 to 8577841 Compare June 2, 2022 21:39
@Pokechu22 Pokechu22 force-pushed the efb-copy-gamma branch 2 times, most recently from a1c4007 to a86499b Compare June 25, 2022 02:50
@Pokechu22 Pokechu22 force-pushed the efb-copy-gamma branch 2 times, most recently from 107bbf7 to f1df630 Compare July 11, 2022 04:11
@Pokechu22
Copy link
Contributor Author

I've merged the hardware tests (dolphin-emu/hwtests#44) and confirmed that they still pass. It'd be nice to get a review on this, since functionally everything seems good to go. (Of the fifoci results above, the important ones are ea-pink and tla-menu; check the radeon results for ea-pink (due to a mesa (llvmpipe) issue that will solved by #10477).)

@iwubcode
Copy link
Contributor

@Pokechu22 - I've been planning on reviewing it, just was waiting for the HLSL thing to merge and then for this to be rebased.

I'm a bit behind on my reviews, I plan on looking it over this week. Sorry for the delay!

@@ -62,7 +62,7 @@ static void WriteHeader(ShaderCode& code, APIType api_type)
" float y_scale;\n"
" float gamma_rcp;\n"
" float2 clamp_tb;\n"
" float3 filter_coefficients;\n"
" uint3 filter_coefficients;\n"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does the switch to integers give us some advantage? I only ask because I'd assume there'd be a (slight) performance hit by dividing by 64.0 in the shaders at each pixel.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It allows using combined_rows.rgb >> 6 to divide by 64 and round down (which is the hardware's behavior), and it also makes writing texcol_raw &= 0x1ffu easier.

I vaguely remember some annoyance about round having implementation-defined behavior with .5, but looking at it further it's floor that would be needed here instead and that doesn't have the same issue so I'm not sure if there's a reason why it couldn't be done with floats; it'd just be a bit messier. (Perhaps it was the part with YUV conversion, since that does have rounding?)


bool TextureCacheBase::CopyFilterCanOverflow(const std::array<u32, 3>& coefficients)
{
// Normally, the copy filter coefficients will sum to at most 64. If the sum is higher than that,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So I recall this overflow behavior but I forget the details I know games can go higher than 64 to induce brightening of the overall image. Can you give any more details - how does the clamping break?

And are there any known occurrences of a game using 128 or higher?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If the value for a color channel is 512 or higher, it ends up wrapping around to 0 again (so presumably when the clamping to [0, 255] is applied, they use a field that can store [0, 511]). I don't know of any situation where this behavior would be useful, but it's something I encountered in my hardware test, so I implemented it. (It's conditionally enabled so that there's no performance cost for situations where it's impossible for the value to reach 512.)

(I actually don't know of any games that go above 64 to produce brightening, only of ones that go below 64 to produce darkening - they probably exist, though.)

@iwubcode
Copy link
Contributor

iwubcode commented Jul 12, 2022

I tested a handful of games. Brawl / Arc Rise / other games that have a sharpening filter work fine.

The thing that doesn't work (and it's not your PR, master is also broken) is the brightness settings in many games. I don't know why? I recall it working at one point but I could be misremembering. Maybe the coefficients need to apply to EFB copies as opposed to XFBs. I'm not sure.

I will give the code one more pass tomorrow.

@Pokechu22
Copy link
Contributor Author

Hmm. Can you give an example of a game where it's not working? I'd like to investigate that further.

Maybe the coefficients need to apply to EFB copies as opposed to XFBs. I'm not sure.

That's something that was implemented in #10204 (and that this PR improves - my hardware test mostly uses EFB copies instead of XFB copies because it's a lot easier to work with texture data in EFB copies).

@iwubcode
Copy link
Contributor

iwubcode commented Jul 12, 2022

Hmm. Can you give an example of a game where it's not working? I'd like to investigate that further.

Pandora's Tower and the Last Story. Possibly Xenoblade.

Little King's Story / Monster Lab work but they work even with the copy filter disabled, so probably using a different approach.

EDIT:

That's something that was implemented in #10204

Completely forgot I reviewed that PR. But yeah, ignore that comment, I'm too sleepy. Time for bed!

@Pokechu22
Copy link
Contributor Author

Pokechu22 commented Jul 12, 2022

One other possibility is HW_VIDIM at 0x0d80001C (which might be accessed through /dev/stm/immediate) which is unimplemented. There are also HW_VI1CFG and HW_VISOLID at 0x0d800018 and 0x0d800024 respectively which don't implement either (note that the Wii Menu reads both of these, in addition to any games that write them, and that we call VI1CFG PPCSPEED instead (no idea if there's any reason for this or if it was just renamed on Wiibrew later on)).

EDIT: IOCTL_STM_VIDIMMING is used by games if the screen burn-in reduction feature is enable in the Wii settings after idling for about 5 minutes (though the system menu itself doesn't seem to use it; the Mii channel does). Dolphin doesn't change the screen in any way when this happens currently. But I think this feature can only be used to darken the screen, not to brighten it?

If you could record a few fifologs of the same game with the brightness settings at different values, then I could check via the hardware fifoplayer whether it makes a difference. If the brightness doesn't change using the hardware fifoplayer, it's probably one of those registers since those aren't stored in fifologs.

@iwubcode
Copy link
Contributor

iwubcode commented Jul 13, 2022

Thanks @Pokechu22 . I opened issue 12974, interestingly, this ticket did exist before ( 5379 ) but it was coupled with the copy filter issue. The first build of the copy filter didn't work either. Though I suppose it might be worthwhile for me to check on console to make sure what I'm seeing is unexpected.

Should I finish my review on this one or do you want to wait until you've investigated the issue?

The only remaining casts for these types that I know of are in TextureInfo (where format_name is set to the int version of the format, and since that affects filenames and probably would break resource packs, I'm not changing it) and in TextureDecoder_Common's TexDecoder_DrawOverlay, which will be handled separately.
This required adding parentheses to the font used by that.
It was named yuv in 522746b, but hardware testing indicates that that bit does nothing (the intensity format bit enables YUV conversion, instead).
auto_conv is normally always set for EFB copies, but hardware testing indicates that intensity_fmt does nothing if auto_conv is not set.
This also changes the behavior for the invalid gamma value, which was confirmed to behave the same as 2.2.

Note that currently, the gamma value is only used for XFB copies, even though hardware testing indicates it also works for EFB copies.  This will be changed in a later commit.
This struct is the only one in BPMemory that uses u64 as its base.  These fields are to allow viewing it as two u32s instead.  It's not used by Dolphin right now, but it is used in the copy of BPMemory.h used by hwtests.
@Pokechu22
Copy link
Contributor Author

I took a quick look at that issue and it doesn't seem to be related to the copy filter. I'll put more info in a comment on that ticket.

@iwubcode
Copy link
Contributor

@Pokechu22 - sounds good. I will finish my review of this then. Thank you for your work!

Copy link
Contributor

@iwubcode iwubcode left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code LGTM.

@dolphin-emu-bot
Copy link
Contributor

FifoCI detected that this change impacts graphical rendering. Here are the behavior differences detected by the system:

  • ea-pink on ogl-lin-mesa: diff
  • fishing-resort-map on ogl-lin-mesa: diff
  • inverted-depth-range on ogl-lin-mesa: diff
  • mkw-bridge on ogl-lin-mesa: diff
  • mkwii-bluebox on ogl-lin-mesa: diff
  • my-word-coach on ogl-lin-mesa: diff
  • nddemo-bumpmapping on ogl-lin-mesa: diff
  • nddemo-lighting on ogl-lin-mesa: diff
  • nfsu-reflections on ogl-lin-mesa: diff
  • pbr-sfx on ogl-lin-mesa: diff
  • spyro-bloom on ogl-lin-mesa: diff
  • spyro-depth on ogl-lin-mesa: diff
  • ss-map on ogl-lin-mesa: diff
  • tla-menu on ogl-lin-mesa: diff
  • tsp3-pinkgrass on ogl-lin-mesa: diff
  • zww-armos on ogl-lin-mesa: diff
  • zww-water on ogl-lin-mesa: diff
  • zww-waves on ogl-lin-mesa: diff
  • ab11-homebrew on sw-lin-mesa: diff
  • aeon-charge-attack on sw-lin-mesa: diff
  • bk-tev on sw-lin-mesa: diff
  • burnout2-vehicletextures on sw-lin-mesa: diff
  • chibi-robo-fastdepth on sw-lin-mesa: diff
  • chibi-robo-zfighting on sw-lin-mesa: diff
  • custom-brawl-char on sw-lin-mesa: diff
  • dbz-depth on sw-lin-mesa: diff
  • djfny-menu on sw-lin-mesa: diff
  • djhero2-blend on sw-lin-mesa: diff
  • DKCR-Char on sw-lin-mesa: diff
  • DKCR-fast-depth on sw-lin-mesa: diff
  • ea-pink on sw-lin-mesa: diff
  • ea-vp6 on sw-lin-mesa: diff
  • ed-updated on sw-lin-mesa: diff
  • et-vid on sw-lin-mesa: diff
  • find-mii on sw-lin-mesa: diff
  • fishing-resort-map on sw-lin-mesa: diff
  • fog-adj on sw-lin-mesa: diff
  • fortune-street on sw-lin-mesa: diff
  • fortune-street-fog on sw-lin-mesa: diff
  • fortune-street-white-box on sw-lin-mesa: diff
  • fsa-layers on sw-lin-mesa: diff
  • f-zero-rain on sw-lin-mesa: diff
  • goldeneye-depth on sw-lin-mesa: diff
  • hb-discgolf on sw-lin-mesa: diff
  • inverted-depth-range on sw-lin-mesa: diff
  • jb-shadow on sw-lin-mesa: diff
  • jd2-fmv on sw-lin-mesa: diff
  • jj-awae-mirrored on sw-lin-mesa: diff
  • kirby-logicop on sw-lin-mesa: diff
  • kirby-shadows on sw-lin-mesa: diff
  • last-story-shadows on sw-lin-mesa: diff
  • lego-star-wars-crane-shadow on sw-lin-mesa: diff
  • lesson08 on sw-lin-mesa: diff
  • line-width-test on sw-lin-mesa: diff
  • lm-mario-portrait on sw-lin-mesa: diff
  • luigi-shadows on sw-lin-mesa: diff
  • major-minor on sw-lin-mesa: diff
  • mario-baseball-shadows on sw-lin-mesa: diff
  • mario-golf-oob on sw-lin-mesa: diff
  • mario-sluggers-bar on sw-lin-mesa: diff
  • mario-tennis-menu on sw-lin-mesa: diff
  • MaS-LOG-wiimote on sw-lin-mesa: diff
  • megaman-heat on sw-lin-mesa: diff
  • melee-depth on sw-lin-mesa: diff
  • melee-lighting on sw-lin-mesa: diff
  • metroid-visor on sw-lin-mesa: diff
  • mii-channel on sw-lin-mesa: diff
  • milotic-texture on sw-lin-mesa: diff
  • mini-ninjas on sw-lin-mesa: diff
  • mkdd-babypark on sw-lin-mesa: diff
  • mkdd-efb on sw-lin-mesa: diff
  • mkw-bridge on sw-lin-mesa: diff
  • mkw-flags on sw-lin-mesa: diff
  • mkwii-bluebox on sw-lin-mesa: diff
  • mmx-light on sw-lin-mesa: diff
  • monkeyball-fuse on sw-lin-mesa: diff
  • mp2-scanner on sw-lin-mesa: diff
  • mp3-bloom on sw-lin-mesa: diff
  • mp4-vertexcache on sw-lin-mesa: diff
  • mp7-text on sw-lin-mesa: diff
  • mp8-widescreen on sw-lin-mesa: diff
  • mtennis-zfreeze on sw-lin-mesa: diff
  • my-word-coach on sw-lin-mesa: diff
  • nddemo-bumpmapping on sw-lin-mesa: diff
  • nddemo-lighting on sw-lin-mesa: diff
  • nes-vc on sw-lin-mesa: diff
  • nfsu-purplerect on sw-lin-mesa: diff
  • nfsu-reflections on sw-lin-mesa: diff
  • nhl-slap on sw-lin-mesa: diff
  • nintendo-channel on sw-lin-mesa: diff
  • nsmbw-coins on sw-lin-mesa: diff
  • nsmbw-intro on sw-lin-mesa: diff
  • pbr-sfx on sw-lin-mesa: diff
  • pm-hc-jp on sw-lin-mesa: diff
  • puzzle-collection on sw-lin-mesa: diff
  • pw-black-bars on sw-lin-mesa: diff
  • quake-gx on sw-lin-mesa: diff
  • rs2-bumpmapping on sw-lin-mesa: diff
  • rs2-glass on sw-lin-mesa: diff
  • rs2-skybox on sw-lin-mesa: diff
  • rs2-zfreeze on sw-lin-mesa: diff
  • rs3-bumpmapping on sw-lin-mesa: diff
  • rs3-skybox2 on sw-lin-mesa: diff
  • sadx-ui on sw-lin-mesa: diff
  • sfa-shadows on sw-lin-mesa: diff
  • sf-assault-flashing on sw-lin-mesa: diff
  • shadow-eyes on sw-lin-mesa: diff
  • simpsons-game on sw-lin-mesa: diff
  • smb-mirror on sw-lin-mesa: diff
  • smg2-fog on sw-lin-mesa: diff
  • smg-marioeyes on sw-lin-mesa: diff
  • smg-mmg on sw-lin-mesa: diff
  • smg-roar on sw-lin-mesa: diff
  • sms-bubbles on sw-lin-mesa: diff
  • sms-gc on sw-lin-mesa: diff
  • sms-water on sw-lin-mesa: diff
  • soa-black on sw-lin-mesa: diff
  • soniccolors-mm on sw-lin-mesa: diff
  • sonic-riders-blur on sw-lin-mesa: diff
  • sonic-riders-zg-4p on sw-lin-mesa: diff
  • sonicriderszg-gb on sw-lin-mesa: diff
  • spyro-bloom on sw-lin-mesa: diff
  • spyro-depth on sw-lin-mesa: diff
  • ssbb-mod-lloyd on sw-lin-mesa: diff
  • ssbm-pointsize on sw-lin-mesa: diff
  • ss-map on sw-lin-mesa: diff
  • super-sluggers-white-out on sw-lin-mesa: diff
  • sw3-dt on sw-lin-mesa: diff
  • taiko-depth on sw-lin-mesa: diff
  • thps3-earlyz on sw-lin-mesa: diff
  • thps4-shadow on sw-lin-mesa: diff
  • tla-menu on sw-lin-mesa: diff
  • tos-invis-char on sw-lin-mesa: diff
  • tp-skin on sw-lin-mesa: diff
  • tsp3-pinkgrass on sw-lin-mesa: diff
  • vegas-party-depth on sw-lin-mesa: diff
  • viewitful-joe-distortion on sw-lin-mesa: diff
  • xenoblade-menu on sw-lin-mesa: diff
  • zelda1-vc on sw-lin-mesa: diff
  • ztp-grass on sw-lin-mesa: diff
  • zww-armos on sw-lin-mesa: diff
  • zww-water on sw-lin-mesa: diff
  • zww-waves on sw-lin-mesa: diff
  • ab11-homebrew on ogl-lin-radeon: diff
  • burnout2-vehicletextures on ogl-lin-radeon: diff
  • dbz-depth on ogl-lin-radeon: diff
  • djhero2-blend on ogl-lin-radeon: diff
  • ea-pink on ogl-lin-radeon: diff
  • fishing-resort-map on ogl-lin-radeon: diff
  • fortune-street on ogl-lin-radeon: diff
  • fortune-street-white-box on ogl-lin-radeon: diff
  • inverted-depth-range on ogl-lin-radeon: diff
  • last-story-shadows on ogl-lin-radeon: diff
  • lego-star-wars-crane-shadow on ogl-lin-radeon: diff
  • mario-golf-oob on ogl-lin-radeon: diff
  • mini-ninjas on ogl-lin-radeon: diff
  • mkdd-efb on ogl-lin-radeon: diff
  • mkw-bridge on ogl-lin-radeon: diff
  • mkwii-bluebox on ogl-lin-radeon: diff
  • mp3-bloom on ogl-lin-radeon: diff
  • mp4-vertexcache on ogl-lin-radeon: diff
  • my-word-coach on ogl-lin-radeon: diff
  • nddemo-bumpmapping on ogl-lin-radeon: diff
  • nddemo-lighting on ogl-lin-radeon: diff
  • nfsu-purplerect on ogl-lin-radeon: diff
  • nfsu-reflections on ogl-lin-radeon: diff
  • pbr-sfx on ogl-lin-radeon: diff
  • rs3-skybox2 on ogl-lin-radeon: diff
  • spyro-bloom on ogl-lin-radeon: diff
  • spyro-depth on ogl-lin-radeon: diff
  • ss-map on ogl-lin-radeon: diff
  • sw3-dt on ogl-lin-radeon: diff
  • tla-menu on ogl-lin-radeon: diff
  • tp-skin on ogl-lin-radeon: diff
  • tsp3-pinkgrass on ogl-lin-radeon: diff
  • xenoblade-menu on ogl-lin-radeon: diff
  • ztp-grass on ogl-lin-radeon: diff
  • zww-armos on ogl-lin-radeon: diff
  • zww-water on ogl-lin-radeon: diff
  • zww-waves on ogl-lin-radeon: diff
  • ab11-homebrew on uberogl-lin-radeon: diff
  • burnout2-vehicletextures on uberogl-lin-radeon: diff
  • dbz-depth on uberogl-lin-radeon: diff
  • djhero2-blend on uberogl-lin-radeon: diff
  • ea-pink on uberogl-lin-radeon: diff
  • fishing-resort-map on uberogl-lin-radeon: diff
  • fortune-street on uberogl-lin-radeon: diff
  • fortune-street-white-box on uberogl-lin-radeon: diff
  • inverted-depth-range on uberogl-lin-radeon: diff
  • last-story-shadows on uberogl-lin-radeon: diff
  • lego-star-wars-crane-shadow on uberogl-lin-radeon: diff
  • mario-golf-oob on uberogl-lin-radeon: diff
  • mini-ninjas on uberogl-lin-radeon: diff
  • mkdd-efb on uberogl-lin-radeon: diff
  • mkw-bridge on uberogl-lin-radeon: diff
  • mkwii-bluebox on uberogl-lin-radeon: diff
  • mp3-bloom on uberogl-lin-radeon: diff
  • mp4-vertexcache on uberogl-lin-radeon: diff
  • my-word-coach on uberogl-lin-radeon: diff
  • nddemo-bumpmapping on uberogl-lin-radeon: diff
  • nddemo-lighting on uberogl-lin-radeon: diff
  • nfsu-purplerect on uberogl-lin-radeon: diff
  • nfsu-reflections on uberogl-lin-radeon: diff
  • pbr-sfx on uberogl-lin-radeon: diff
  • rs3-skybox2 on uberogl-lin-radeon: diff
  • spyro-bloom on uberogl-lin-radeon: diff
  • spyro-depth on uberogl-lin-radeon: diff
  • ss-map on uberogl-lin-radeon: diff
  • sw3-dt on uberogl-lin-radeon: diff
  • tla-menu on uberogl-lin-radeon: diff
  • tp-skin on uberogl-lin-radeon: diff
  • tsp3-pinkgrass on uberogl-lin-radeon: diff
  • xenoblade-menu on uberogl-lin-radeon: diff
  • ztp-grass on uberogl-lin-radeon: diff
  • zww-armos on uberogl-lin-radeon: diff
  • zww-water on uberogl-lin-radeon: diff
  • zww-waves on uberogl-lin-radeon: diff

automated-fifoci-reporter

@JMC47 JMC47 merged commit f1d23ff into dolphin-emu:master Jul 17, 2022
Copy link
Contributor

@TellowKrinkle TellowKrinkle left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Side note, you can do a / 256 with rounding in slightly less instructions with (texcol_raw.rgb + 128u) >> 8

" dot(u_const, float4(texcol_raw.rgb, 256)),\n"
" dot(v_const, float4(texcol_raw.rgb, 256)));\n"
" // Divide by 256 and round .5 and higher up\n"
" texcol_raw.rgb = (texcol_raw.rgb >> 8) + ((texcol_raw.rgb >> 7) & 1);\n");
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

macOS OpenGL unhappy here, wants & 1u

" dot(u_const, float4(texcol_raw.rgb, 256)),\n"
" dot(v_const, float4(texcol_raw.rgb, 256)));\n"
" // Divide by 256 and round .5 and higher up\n"
" texcol_raw.rgb = (texcol_raw.rgb >> 8) + ((texcol_raw.rgb >> 7) & 1);\n");
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

macOS OpenGL unhappy here, wants & 1u

dvessel added a commit to dvessel/dolphin that referenced this pull request Jul 17, 2022
Followup to dolphin-emu#10466. Resolves the following error:

ERROR: 0:85: '&' does not operate on 'uvec3' and 'int'
OatmealDome pushed a commit to OatmealDome/dolphin that referenced this pull request Sep 3, 2023
Followup to dolphin-emu#10466. Resolves the following error:

ERROR: 0:85: '&' does not operate on 'uvec3' and 'int'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
5 participants