dolphin icon indicating copy to clipboard operation
dolphin copied to clipboard

VertexShader: Remove the Offset for the Pixel Center + Rename

Open PatrickFerry opened this issue 1 year ago • 12 comments

The pixel center is the same as the rendering APIs we use and there is no need for any offset of 1/12.

Also rename pixel center correction to pixel position correction for the rest of the usages.

This should fix a bunch of the minor graphical issues where lines may be visible between textures.

Fixes issue 12844

PatrickFerry avatar Aug 03 '24 12:08 PatrickFerry

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

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

automated-fifoci-reporter

dolphin-ci[bot] avatar Aug 03 '24 14:08 dolphin-ci[bot]

I looked into this years ago. I imagine there are cases where our pixel center correction rounds incorrectly. Even in the fifoci you can see a case (nhl-slap) where we can see some improvement.

I was hopeful this would fix some of our higher IR scenarios (ex: Mario Kart Wii) but it does not. In fact, when combined with our vertex rounding hack, it now makes some titles worse (Silent Hill and Spongebob), I'm assuming because the rounding no longer is applied in the same way.

It also doesn't seem to fix known issues but at native it does seem to be mostly positive.

I can't really say what is right, as this was supposedly hardware tested.

Curious if @JMC47 remembers why the offset was added in the first place?

And will tag @Pokechu22 as well.

iwubcode avatar Aug 03 '24 19:08 iwubcode

This is likely a necessary change based on the fifoci fixes, but we may need to adjust higher internal resolutions differently to prevent issues.

JMC47 avatar Aug 05 '24 21:08 JMC47

For reference, the original issues, for why this was added in the first place: https://bugs.dolphin-emu.org/issues/267, https://bugs.dolphin-emu.org/issues/7196 .

See article entry: https://dolphin-emu.org/blog/2014/04/30/dolphin-progress-report-april-2014/#40-1474-consider-shifted-pixel-centers-by-neobrain

If this is really redundant now, we should figure out what fix made it that way. It might play into a higher IR fix (and remove the need for vertex rounding?)

iwubcode avatar Aug 05 '24 22:08 iwubcode

After more serious testing, this does break a lot of stuff too. Sonic Heroes - the game mentioned in that issue report, breaks.

JMC47 avatar Aug 05 '24 22:08 JMC47

The issue with Sonic Heroes was exposed by this change but when using native the issue is only on OpenGL and I know what's gone wrong. OpenGL is wrongly is clamping EFB in the wrong direction, because the Y is reversed as compared to other video backends.

I will fix that issue.

PatrickFerry avatar Aug 05 '24 22:08 PatrickFerry

What about the issues in the menus of Sonic Heroes on Vulkan, the "no memory" card screen looks really wrong for instance.

OpenGL

image

Vulkan

image

JMC47 avatar Aug 06 '24 02:08 JMC47

On Just Dance 2 FMV, it's still not working properly

https://fifo.ci/compare/12546504-12538644/

I'll quote degasus here.

https://github.com/dolphin-emu/dolphin/blob/master/Source/Core/VideoBackends/Software/Rasterizer.cpp#L333

"trunc(pos * 16) - 8, the trunc operation moves the center of the pixel.

Vertex rounding with an offset would be correct. However everything just at 1xIR. With upscaling, I'd expect game developers to not care and to just floor "a bit" so that .5+-epsilon as position gets a deterministic rounding "

JMC47 avatar Aug 06 '24 02:08 JMC47

The pixel center is the same as hardware backends and there is no need for any offset of 1/12.

I'm a bit confused about what "hardware backends" is supposed to mean here (unless you instead mean the software renderer?)

Also, I've always wondered how BPMEM_DISPLAYCOPYFILTER affects this. GX_SetCopyFilter only makes use of that if antialiasing is enabled, but it sets all 4 of them to 0x666666 if antialiasing is disabled. That value may still be relevant, though I'm not sure if any games actually set it to a different value outside of antialiasing (it's probably not exposed at all). (We don't emulate the GameCube/Wii antialiasing at all, either.)

Pokechu22 avatar Aug 07 '24 04:08 Pokechu22

@JMC47

After more serious testing, this does break a lot of stuff too. Sonic Heroes - the game mentioned in that issue report, breaks.

I have opened a PR to handle the Sonic Heroes issue in PR #12982.

On Just Dance 2 FMV, it's still not working properly

I will not be able to resolve the issue with Just Dance 2 FMV as it's not even working on the software renderer. The issue does not originate from this change.

What about the issues in the menus of Sonic Heroes on Vulkan, the "no memory" card screen looks really wrong for instance.

If there are other backend specific issues, then the issue is not with fixing the pixel center, the issue is with that backend. But, I will look at that too and see what's happening.

PatrickFerry avatar Aug 08 '24 02:08 PatrickFerry

@Pokechu22

I'm a bit confused about what "hardware backends" is supposed to mean here (unless you instead mean the software renderer?)

Sorry, I had meant the hardware backends's APIs, as in the rendering APIs themselves since OpenGL, Direct3D and Vulkan place the pixel center at exactly (0.5, 0.5)

Also, I've always wondered how BPMEM_DISPLAYCOPYFILTER affects this.

There is definitely more to tackle with offset issues and that might hold some answers

PatrickFerry avatar Aug 08 '24 02:08 PatrickFerry

Sorry to hijack this PR, but is there any chance that this "pixel center" calculation (or its interaction with BPMEM_DISPLAYCOPYFILTER) is behind the problem reported in this issue (corrupted map in Twilight Princess for GC when using Native Resolution + SSAA)? The issue seems to be related to getting a proper "pixel center" in the case of even IRs. Sorry again if this is completely unrelated. Thanks!

golivax avatar Aug 08 '24 02:08 golivax