[Bug 45468] New: Phase Shift: tails on sustain notes not visible unless GLSL is disabled

wine-bugs at winehq.org wine-bugs at winehq.org
Mon Jul 16 23:59:19 CDT 2018


https://bugs.winehq.org/show_bug.cgi?id=45468

            Bug ID: 45468
           Summary: Phase Shift: tails on sustain notes not visible unless
                    GLSL is disabled
           Product: Wine
           Version: 3.12
          Hardware: x86
                OS: Linux
            Status: UNCONFIRMED
          Severity: minor
          Priority: P2
         Component: directx-d3d
          Assignee: wine-bugs at winehq.org
          Reporter: q3aiml+wine at gmail.com
      Distribution: ---

Created attachment 61811
  --> https://bugs.winehq.org/attachment.cgi?id=61811
missing tail by default

During a song the notes that should be held (sustain notes) should have tails
rendered after the note indicating the hold. These tails are not visible by
default under wine. There are no visible artifacts. The notes instead appear
like normal, non-sustain notes.

Steps to reproduce:
* Install version 1.27 of Phase Shift
(http://www.dwsk.co.uk/phase_shift_downloads.html,
https://mega.co.nz/#!JkwSxayT!cKdLVz8GrRrla2jkDmOvlMWxtmsdbWvoboP_vmgLw3o)
* Run 'winetricks vcrun2013' to fix missing msvcr120.dll._strerror_s on startup
* Select Quickplay in main menu (use number 1 key to select)
* Select song Positive Force, a song that comes bundled with the full 1.27
download, or any other song with sustain notes
* Press 1 to join with keyboard
* Select Guitar intrument and Hard difficulty, or any other song and difficulty
combo with sustain notes
* Press 1 to continue and 1 again when prompted to press green to begin
* Observe that the first note of Positive Force should have a green tail
(follow by grey if the note is missed), but instead appears as a normal,
non-sustain note

The tails render properly after setting UseGLSL to disabled and MaxVersionGL to
0x30001 (cannot disable GLSL with GL 3.2 or newer).

I think this has something to do with how the generated ffp emulating shaders
calculate the alpha channel and apply an alpha test. Here is what I am seeing
leading to the pixels being discarded:

# relevant uniforms

specular_enable = [1, 1, 1, 0]
alpha_test_ref = 0.0117647061124444
ffp_material.diffuse = [0, 0, 0, 0]

# relevant bits of vertex shader

ffp_varying_diffuse.w = ffp_material.diffuse.w;

# relevant bits of fragment shader

// ffp_varying_diffuse.w = 0  ->  ret.w = 0 regardless of tex0.w
ret.w = tex0.w * ffp_varying_diffuse.w;

// specular_enable.w = 0 and ret.w = 0  ->  ps_out[0].a = 0
ps_out[0] = ffp_varying_specular * specular_enable + ret;

// ps_out[0].a = 0, alpha_test_ref = 0.01..., alpha test fails and discards
pixel
if (!(ps_out[0].a >= alpha_test_ref))
    discard;

-- 
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.



More information about the wine-bugs mailing list