citra icon indicating copy to clipboard operation
citra copied to clipboard

Crashes after loading any game on 22.7.1 AMD Driver on Windows 11

Open Herpderpus666 opened this issue 2 years ago • 5 comments

Citra crashes after loading any game on W11 on the latest AMD driver (22.7.1). GPU is Radeon RX6800 Happens with stable, nightly and canary build. Some warnings in my log file because I copied some files over from Citra on Android or some other build. Happens on a clean folder too btw.

Log file:

[   0.002077] Config <Info> core/settings.cpp:operator():77: Core_UseCpuJit: true
[   0.002082] Config <Info> core/settings.cpp:operator():77: Core_CPUClockPercentage: 100
[   0.002083] Config <Info> core/settings.cpp:operator():77: Renderer_UseGLES: false
[   0.002083] Config <Info> core/settings.cpp:operator():77: Renderer_UseHwRenderer: true
[   0.002084] Config <Info> core/settings.cpp:operator():77: Renderer_UseHwShader: true
[   0.002084] Config <Info> core/settings.cpp:operator():77: Renderer_SeparableShader: false
[   0.002085] Config <Info> core/settings.cpp:operator():77: Renderer_ShadersAccurateMul: true
[   0.002086] Config <Info> core/settings.cpp:operator():77: Renderer_UseShaderJit: true
[   0.002086] Config <Info> core/settings.cpp:operator():77: Renderer_UseResolutionFactor: 2
[   0.002087] Config <Info> core/settings.cpp:operator():77: Renderer_FrameLimit: 100
[   0.002087] Config <Info> core/settings.cpp:operator():77: Renderer_UseFrameLimitAlternate: false
[   0.002088] Config <Info> core/settings.cpp:operator():77: Renderer_FrameLimitAlternate: 200
[   0.002088] Config <Info> core/settings.cpp:operator():77: Renderer_VSyncNew: true
[   0.002089] Config <Info> core/settings.cpp:operator():77: Renderer_PostProcessingShader: none (builtin)
[   0.002089] Config <Info> core/settings.cpp:operator():77: Renderer_FilterMode: true
[   0.002090] Config <Info> core/settings.cpp:operator():77: Renderer_TextureFilterName: none
[   0.002091] Config <Info> core/settings.cpp:operator():77: Stereoscopy_Render3d: 0
[   0.002091] Config <Info> core/settings.cpp:operator():77: Stereoscopy_Factor3d: 0
[   0.002092] Config <Info> core/settings.cpp:operator():77: Layout_LayoutOption: 0
[   0.002094] Config <Info> core/settings.cpp:operator():77: Layout_SwapScreen: false
[   0.002095] Config <Info> core/settings.cpp:operator():77: Layout_UprightScreen: false
[   0.002095] Config <Info> core/settings.cpp:operator():77: Utility_DumpTextures: false
[   0.002096] Config <Info> core/settings.cpp:operator():77: Utility_CustomTextures: false
[   0.002096] Config <Info> core/settings.cpp:operator():77: Utility_UseDiskShaderCache: true
[   0.002097] Config <Info> core/settings.cpp:operator():77: Audio_EnableDspLle: false
[   0.002097] Config <Info> core/settings.cpp:operator():77: Audio_EnableDspLleMultithread: false
[   0.002098] Config <Info> core/settings.cpp:operator():77: Audio_OutputEngine: auto
[   0.002098] Config <Info> core/settings.cpp:operator():77: Audio_EnableAudioStretching: false
[   0.002098] Config <Info> core/settings.cpp:operator():77: Audio_OutputDevice: auto
[   0.002099] Config <Info> core/settings.cpp:operator():77: Audio_InputDeviceType: 0
[   0.002099] Config <Info> core/settings.cpp:operator():77: Audio_InputDevice: Default
[   0.002100] Config <Info> core/settings.cpp:operator():77: Camera_OuterRightName: blank
[   0.002100] Config <Info> core/settings.cpp:operator():77: Camera_OuterRightConfig: 
[   0.002101] Config <Info> core/settings.cpp:operator():77: Camera_OuterRightFlip: 0
[   0.002101] Config <Info> core/settings.cpp:operator():77: Camera_InnerName: blank
[   0.002102] Config <Info> core/settings.cpp:operator():77: Camera_InnerConfig: 
[   0.002102] Config <Info> core/settings.cpp:operator():77: Camera_InnerFlip: 0
[   0.002103] Config <Info> core/settings.cpp:operator():77: Camera_OuterLeftName: blank
[   0.002103] Config <Info> core/settings.cpp:operator():77: Camera_OuterLeftConfig: 
[   0.002104] Config <Info> core/settings.cpp:operator():77: Camera_OuterLeftFlip: 0
[   0.002104] Config <Info> core/settings.cpp:operator():77: DataStorage_UseVirtualSd: true
[   0.002105] Config <Info> core/settings.cpp:operator():77: DataStorage_SdmcDir: C:/Users/ASD/Desktop/nightly-mingw/user/sdmc/
[   0.002106] Config <Info> core/settings.cpp:operator():77: DataStorage_NandDir: C:/Users/ASD/Desktop/nightly-mingw/user/nand/
[   0.002106] Config <Info> core/settings.cpp:operator():77: System_IsNew3ds: true
[   0.002107] Config <Info> core/settings.cpp:operator():77: System_RegionValue: -1
[   0.002107] Config <Info> core/settings.cpp:operator():77: Debugging_UseGdbstub: false
[   0.002108] Config <Info> core/settings.cpp:operator():77: Debugging_GdbstubPort: 24689
[   0.199820] Input <Info> input_common/sdl/sdl_impl.cpp:InitGameController:508: opened joystick 0 as controller
[   0.199837] Input <Info> input_common/udp/client.cpp:StartCommunication:207: Starting communication with UDP input server on 127.0.0.1:26760
[   0.390804] Frontend <Info> citra_qt/main.cpp:GMainWindow:197: Citra Version: Canary 2215  | HEAD-dffe8e2
[   0.390819] Frontend <Info> citra_qt/main.cpp:GMainWindow:213: Host CPU: AMD Ryzen 5 5600X 6-Core Processor              | AVX2 | FMA
[   0.390836] Frontend <Info> citra_qt/main.cpp:GMainWindow:215: Host OS: Windows 10 (10.0)
[   0.418563] Frontend <Warning> citra_qt/main.cpp:CheckForUpdates:841: Unable to start check for updates
[  25.407006] Frontend <Info> citra_qt/main.cpp:BootGame:1031: Citra starting...
[  25.474926] Audio.DSP <Info> audio_core/hle/wmf_decoder.cpp:Impl:67: Media Foundation activated
[  25.475733] Audio.DSP <Info> audio_core/hle/wmf_decoder_utils.cpp:MFDecoderInit:50: Windows(R) Media Foundation found 1 suitable decoder(s)
[  25.502442] Audio.Sink <Info> audio_core/cubeb_sink.cpp:StateCallback:137: Cubeb Audio Stream Started
[  25.502454] RPC_Server <Info> core/rpc/rpc_server.cpp:RPCServer:12: Starting RPC server ...
[  25.502578] RPC_Server <Info> core/rpc/rpc_server.cpp:HandleRequestsLoop:113: Request handler started.
[  25.502589] RPC_Server <Info> core/rpc/rpc_server.cpp:RPCServer:16: RPC started.
[  25.502981] HW.AES <Error> core/hw/aes/key.cpp:LoadPresetKeys:469: Invalid key name generator
[  25.502987] HW.AES <Error> core/hw/aes/key.cpp:LoadPresetKeys:443: Failed to parse # load encryption game
[  25.503005] HW.AES <Error> core/hw/aes/key.cpp:LoadPresetKeys:443: Failed to parse # share Mii via QR code between Citra and 3DS
[  25.503019] HW.AES <Error> core/hw/aes/key.cpp:LoadPresetKeys:443: Failed to parse # generate accurate UDS data frames
[  25.503028] HW.AES <Error> core/hw/aes/key.cpp:LoadPresetKeys:443: Failed to parse # install encrypted CIA
[  25.503031] HW.AES <Error> core/hw/aes/key.cpp:LoadPresetKeys:443: Failed to parse # Friend
[  25.503037] HW.AES <Error> core/hw/aes/key.cpp:LoadPresetKeys:443: Failed to parse # StreetPass
[  25.503045] HW.AES <Error> core/hw/aes/key.cpp:LoadPresetKeys:443: Failed to parse # BOSS
[  25.503053] HW.AES <Error> core/hw/aes/key.cpp:LoadPresetKeys:443: Failed to parse # ssl cert
[  25.503056] HW.AES <Error> core/hw/aes/key.cpp:LoadPresetKeys:443: Failed to parse # common
[  25.503088] HW.AES <Error> core/hw/aes/key.cpp:LoadPresetKeys:443: Failed to parse 
[  25.504306] Service.HTTP <Error> core/hle/service/http_c.cpp:DecryptClCertA:806: ClCertA file missing
[  25.526383] Render.OpenGL <Info> video_core/renderer_opengl/renderer_opengl.cpp:Init:1261: GL_VERSION: 3.3.0 Core Profile Context 22.7.1.220725
[  25.526390] Render.OpenGL <Info> video_core/renderer_opengl/renderer_opengl.cpp:Init:1262: GL_VENDOR: ATI Technologies Inc.
[  25.526390] Render.OpenGL <Info> video_core/renderer_opengl/renderer_opengl.cpp:Init:1263: GL_RENDERER: AMD Radeon RX 6800
[  25.550776] Render.OpenGL <Info> video_core/renderer_opengl/gl_format_reinterpreter.cpp:ShaderD24S8toRGBA8:291: Texture views are unsupported, reinterpretation will do intermediate copy
[  25.550785] Render.OpenGL <Info> video_core/renderer_opengl/gl_format_reinterpreter.cpp:FormatReinterpreterOpenGL:378: Using shader for D24S8 to RGBA8 reinterpretation
[  25.552377] Render.OpenGL <Warning> video_core/renderer_opengl/gl_rasterizer.cpp:RasterizerOpenGL:61: Shadow might not be able to render because of unsupported OpenGL extensions.
[  25.554415] Loader <Info> core/loader/ncch.cpp:Load:192: Program ID: 000400000018F200
[  25.554463] Service.FS <Warning> core/file_sys/ncch_container.cpp:OpenFile:130: Failed to open C:/Users/ASD/Desktop/nightly-mingw/user/sdmc/Nintendo 3DS/00000000000000000000000000000000/00000000000000000000000000000000/title/0004000e/0018f200/content/00000000.app
[  25.568351] Loader <Info> core/hle/kernel/process.cpp:ParseKernelCaps:141: ExHeader kernel version: 2.33
[  25.569622] Service.CFG <Info> core/hle/service/cfg/cfg.cpp:SetPreferredRegionCodes:656: Preferred region code set to 2
[  25.573133] Core.Cheats <Warning> core/cheats/gateway_cheat.cpp:SetEnabled:432: Cheats enabled. This might lead to weird behaviour or crashes
[  25.577519] Render.OpenGL <Info> video_core/renderer_opengl/gl_shader_disk_cache.cpp:LoadTransferable:117: No transferable shader cache found for game with title id=000400000018F200
[  25.579186] Core <Warning> core/savestate.cpp:ListSaveStates:91: Save state file C:\Users\ASD\Desktop\nightly-mingw/user/states/000400000018F200.01.cst created from a different revision 355933218d00603c910cd0a9daead0b1cd72a3c3
[  25.579341] Core <Warning> core/savestate.cpp:ListSaveStates:91: Save state file C:\Users\ASD\Desktop\nightly-mingw/user/states/000400000018F200.02.cst created from a different revision 355933218d00603c910cd0a9daead0b1cd72a3c3
[  25.579421] Core <Warning> core/savestate.cpp:ListSaveStates:91: Save state file C:\Users\ASD\Desktop\nightly-mingw/user/states/000400000018F200.03.cst created from a different revision 355933218d00603c910cd0a9daead0b1cd72a3c3
[  25.579495] Core <Warning> core/savestate.cpp:ListSaveStates:91: Save state file C:\Users\ASD\Desktop\nightly-mingw/user/states/000400000018F200.04.cst created from a different revision 355933218d00603c910cd0a9daead0b1cd72a3c3
[  25.579564] Core <Warning> core/savestate.cpp:ListSaveStates:91: Save state file C:\Users\ASD\Desktop\nightly-mingw/user/states/000400000018F200.05.cst created from a different revision 355933218d00603c910cd0a9daead0b1cd72a3c3
[  25.579633] Core <Warning> core/savestate.cpp:ListSaveStates:91: Save state file C:\Users\ASD\Desktop\nightly-mingw/user/states/000400000018F200.06.cst created from a different revision 355933218d00603c910cd0a9daead0b1cd72a3c3
[  25.579703] Core <Warning> core/savestate.cpp:ListSaveStates:91: Save state file C:\Users\ASD\Desktop\nightly-mingw/user/states/000400000018F200.07.cst created from a different revision 355933218d00603c910cd0a9daead0b1cd72a3c3
[  25.579772] Core <Warning> core/savestate.cpp:ListSaveStates:91: Save state file C:\Users\ASD\Desktop\nightly-mingw/user/states/000400000018F200.08.cst created from a different revision 355933218d00603c910cd0a9daead0b1cd72a3c3
[  25.579841] Core <Warning> core/savestate.cpp:ListSaveStates:91: Save state file C:\Users\ASD\Desktop\nightly-mingw/user/states/000400000018F200.09.cst created from a different revision 355933218d00603c910cd0a9daead0b1cd72a3c3
[  25.579907] Core <Warning> core/savestate.cpp:ListSaveStates:91: Save state file C:\Users\ASD\Desktop\nightly-mingw/user/states/000400000018F200.10.cst created from a different revision 355933218d00603c910cd0a9daead0b1cd72a3c3
[  25.601225] Service.SRV <Warning> core/hle/service/sm/srv.cpp:RegisterClient:63: (STUBBED) called. Caller PID=11
[  25.659002] Service.SRV <Warning> core/hle/service/sm/srv.cpp:EnableNotification:85: (STUBBED) called
[  25.661718] Service.APT <Warning> core/hle/service/apt/apt.cpp:GetLockHandle:317: (STUBBED) called applet_attributes=0X00000000
[  25.666584] Service.APT <Warning> core/hle/service/apt/apt.cpp:SetScreenCapPostPermission:803: (STUBBED) called, screen_capture_post_permission=0
[  25.666988] Service.NDM <Warning> core/hle/service/ndm/ndm_u.cpp:OverrideDefaultDaemons:186: (STUBBED) bit_mask=0x0000000F
[  25.667070] Service.NDM <Warning> core/hle/service/ndm/ndm_u.cpp:SuspendDaemons:74: (STUBBED) bit_mask=0x00000006
[  25.667634] Service.APT <Warning> core/hle/service/apt/apt.cpp:NotifyToWait:296: (STUBBED) app_id=768
[  25.669441] Service.APT <Warning> core/hle/service/apt/apt.cpp:AppletUtility:590: (STUBBED) called command=0X00000007, input_size=0X00000004, output_size=0X00000001
[  25.669664] Service.APT <Warning> core/hle/service/apt/apt.cpp:AppletUtility:590: (STUBBED) called command=0X00000004, input_size=0X00000001, output_size=0X00000001
[  25.672189] Service.FS <Warning> core/hle/service/fs/fs_user.cpp:InitializeWithSdkVersion:600: (STUBBED) called, version: 0x0B0101C8
[  25.672738] Service.FS <Error> ./core/file_sys/archive_backend.h:GetOpenDelayNs:193: Delay generator was not initalized. Using default
[  25.674703] Service.FS <Error> ./core/file_sys/archive_backend.h:GetOpenDelayNs:193: Delay generator was not initalized. Using default
[  25.904525] Service.APT <Warning> core/hle/service/apt/apt.cpp:CheckNew3DSApp:994: (STUBBED) called
[  25.909042] Service.DSP <Info> audio_core/hle/hle.cpp:LoadComponent:496: Firmware hash: 0xdcdb8c683bf28fdd
[  25.909047] Service.DSP <Info> audio_core/hle/hle.cpp:LoadComponent:500: Structures hash: 0x228655de1258d999
[  25.909049] Service.DSP <Info> core/hle/service/dsp/dsp_dsp.cpp:LoadComponent:188: called size=0xC25C, prog_mask=0x000000FF, data_mask=0x000B00FF
[  25.909512] Service.DSP <Info> core/hle/service/dsp/dsp_dsp.cpp:RegisterInterruptEvents:254: Registered interrupt=2, channel=2, event=event-00132934
[  25.909676] Service.DSP <Warning> core/hle/service/dsp/dsp_dsp.cpp:GetSemaphoreEventHandle:271: (STUBBED) called
[  25.909837] Service.DSP <Warning> core/hle/service/dsp/dsp_dsp.cpp:SetSemaphoreMask:281: (STUBBED) called mask=0x2000
[  25.910082] Audio.DSP <Info> audio_core/hle/hle.cpp:PipeWrite:257: Application has requested initialization of DSP hardware
[  25.910197] Service.DSP <Info> core/hle/service/dsp/dsp_dsp.cpp:SetSemaphore:57: called, semaphore_value=4000
[  25.911266] Service.DSP <Info> core/hle/service/dsp/dsp_dsp.cpp:SetSemaphore:57: called, semaphore_value=4000
[  25.914695] Service.APT <Warning> core/hle/service/apt/apt.cpp:SetAppCpuTimeLimit:607: (STUBBED) called, cpu_percent=30, value=1
[  26.081317] Kernel.SVC <Warning> core/hle/kernel/svc.cpp:CreateMemoryBlock:1338: called addr=0x08290000
[  26.139971] Service.FS <Error> core/file_sys/archive_extsavedata.cpp:OpenFile:141: C:/Users/ASD/Desktop/nightly-mingw/user/nand/data/00000000000000000000000000000000/extdata/00048000/F000000B/user/ubll.lst not found
[  26.139978] Service.FS <Error> core/hle/service/fs/fs_user.cpp:OpenFile:77: failed to get a handle for file [Wchar: /ubll.lst]
[  26.151991] Service.GSP <Warning> core/hle/service/gsp/gsp_gpu.cpp:AcquireRight:705: called flag=00000000 process=11 thread_id=0
[  26.157539] Render.OpenGL <Error> video_core/renderer_opengl/gl_rasterizer_cache.cpp:MortonCopy:188: Out of bound texture
[  26.444947] Service.APT <Warning> core/hle/service/apt/apt.cpp:AppletUtility:590: (STUBBED) called command=0X00000004, input_size=0X00000001, output_size=0X00000001
[  26.447579] Kernel.SVC <Warning> core/hle/kernel/svc.cpp:CreateMemoryBlock:1338: called addr=0x00600000
[  26.447725] Service.IR <Info> core/hle/service/ir/ir_user.cpp:InitializeIrNopShared:295: called, shared_buff_size=4096, recv_buff_size=82, recv_buff_packet_count=1, send_buff_size=18, send_buff_packet_count=1, baud_rate=4
[  26.448271] Service.IR <Info> core/hle/service/ir/ir_user.cpp:GetConnectionStatusEvent:371: called
[  26.448574] Service.IR <Info> core/hle/service/ir/ir_user.cpp:RequireConnection:327: called, device_id = 1
[  26.449050] Service.IR <Info> core/hle/service/ir/ir_user.cpp:GetReceiveEvent:336: called
[  26.450682] Service.IR <Info> core/hle/service/ir/ir_user.cpp:Disconnect:362: called
[  26.450804] Service.IR <Info> core/hle/service/ir/ir_user.cpp:FinalizeIrNop:386: called
[  26.451770] Kernel.SVC <Warning> core/hle/kernel/svc.cpp:CreateMemoryBlock:1338: called addr=0x00600000
[  26.451776] Service.IR <Info> core/hle/service/ir/ir_user.cpp:InitializeIrNopShared:295: called, shared_buff_size=4096, recv_buff_size=3280, recv_buff_packet_count=160, send_buff_size=768, send_buff_packet_count=32, baud_rate=4
[  26.451841] Service.IR <Info> core/hle/service/ir/ir_user.cpp:GetConnectionStatusEvent:371: called
[  26.451848] Service.IR <Info> core/hle/service/ir/ir_user.cpp:RequireConnection:327: called, device_id = 1
[  26.452212] Service.IR <Info> core/hle/service/ir/ir_user.cpp:GetReceiveEvent:336: called
[  26.452371] Service.IR <Info> core/hle/service/ir/ir_user.cpp:GetSendEvent:345: called
[  27.138921] Render.OpenGL <Error> video_core/renderer_opengl/gl_shader_util.cpp:LoadShader:63: Error compiling fragment shader:
ERROR: 0:151: 'imageSize' : no matching overloaded function found 
ERROR: 0:151: '' : missing #endif 
ERROR: 0:151: '' : compilation terminated 
ERROR: 3 compilation errors.  No code generated.


[  27.138929] Render.OpenGL <Error> video_core/renderer_opengl/gl_shader_util.cpp:LoadShader:65: Shader source code:
#version 330

#extension GL_ARB_shader_image_load_store : enable
#extension GL_ARB_shader_image_size : enable
#if defined(GL_ARB_shader_image_load_store) && defined(GL_ARB_shader_image_size)
#define ALLOW_SHADOW 1
#endif
#extension GL_ARB_separate_shader_objects : enable
layout (location=1) in vec4 primary_color;
layout (location=2) in vec2 texcoord0;
layout (location=3) in vec2 texcoord1;
layout (location=4) in vec2 texcoord2;
layout (location=5) in float texcoord0_w;
layout (location=6) in vec4 normquat;
layout (location=7) in vec3 view;

#ifndef CITRA_GLES
in vec4 gl_FragCoord;
#endif // CITRA_GLES

out vec4 color;

uniform sampler2D tex0;
uniform sampler2D tex1;
uniform sampler2D tex2;
uniform samplerCube tex_cube;
uniform samplerBuffer texture_buffer_lut_lf;
uniform samplerBuffer texture_buffer_lut_rg;
uniform samplerBuffer texture_buffer_lut_rgba;

#ifdef ALLOW_SHADOW
layout(r32ui) uniform readonly uimage2D shadow_texture_px;
layout(r32ui) uniform readonly uimage2D shadow_texture_nx;
layout(r32ui) uniform readonly uimage2D shadow_texture_py;
layout(r32ui) uniform readonly uimage2D shadow_texture_ny;
layout(r32ui) uniform readonly uimage2D shadow_texture_pz;
layout(r32ui) uniform readonly uimage2D shadow_texture_nz;
layout(r32ui) uniform uimage2D shadow_buffer;
#endif

#define NUM_TEV_STAGES 6
#define NUM_LIGHTS 8
#define NUM_LIGHTING_SAMPLERS 24

struct LightSrc {
    vec3 specular_0;
    vec3 specular_1;
    vec3 diffuse;
    vec3 ambient;
    vec3 position;
    vec3 spot_direction;
    float dist_atten_bias;
    float dist_atten_scale;
};

layout (std140) uniform shader_data {
    int framebuffer_scale;
    int alphatest_ref;
    float depth_scale;
    float depth_offset;
    float shadow_bias_constant;
    float shadow_bias_linear;
    int scissor_x1;
    int scissor_y1;
    int scissor_x2;
    int scissor_y2;
    int fog_lut_offset;
    int proctex_noise_lut_offset;
    int proctex_color_map_offset;
    int proctex_alpha_map_offset;
    int proctex_lut_offset;
    int proctex_diff_lut_offset;
    float proctex_bias;
    int shadow_texture_bias;
    ivec4 lighting_lut_offset[NUM_LIGHTING_SAMPLERS / 4];
    vec3 fog_color;
    vec2 proctex_noise_f;
    vec2 proctex_noise_a;
    vec2 proctex_noise_p;
    vec3 lighting_global_ambient;
    LightSrc light_src[NUM_LIGHTS];
    vec4 const_color[NUM_TEV_STAGES];
    vec4 tev_combiner_buffer_color;
    vec4 clip_coef;
};

// Rotate the vector v by the quaternion q
vec3 quaternion_rotate(vec4 q, vec3 v) {
    return v + 2.0 * cross(q.xyz, cross(q.xyz, v) + q.w * v);
}

float LookupLightingLUT(int lut_index, int index, float delta) {
    vec2 entry = texelFetch(texture_buffer_lut_lf, lighting_lut_offset[lut_index >> 2][lut_index & 3] + index).rg;
    return entry.r + entry.g * delta;
}

float LookupLightingLUTUnsigned(int lut_index, float pos) {
    int index = clamp(int(pos * 256.0), 0, 255);
    float delta = pos * 256.0 - float(index);
    return LookupLightingLUT(lut_index, index, delta);
}

float LookupLightingLUTSigned(int lut_index, float pos) {
    int index = clamp(int(pos * 128.0), -128, 127);
    float delta = pos * 128.0 - float(index);
    if (index < 0) index += 256;
    return LookupLightingLUT(lut_index, index, delta);
}

float byteround(float x) {
    return round(x * 255.0) * (1.0 / 255.0);
}

vec2 byteround(vec2 x) {
    return round(x * 255.0) * (1.0 / 255.0);
}

vec3 byteround(vec3 x) {
    return round(x * 255.0) * (1.0 / 255.0);
}

vec4 byteround(vec4 x) {
    return round(x * 255.0) * (1.0 / 255.0);
}

// PICA's LOD formula for 2D textures.
// This LOD formula is the same as the LOD lower limit defined in OpenGL.
// f(x, y) >= max{m_u, m_v, m_w}
// (See OpenGL 4.6 spec, 8.14.1 - Scale Factor and Level-of-Detail)
float getLod(vec2 coord) {
    vec2 d = max(abs(dFdx(coord)), abs(dFdy(coord)));
    return log2(max(d.x, d.y));
}

#ifdef ALLOW_SHADOW

uvec2 DecodeShadow(uint pixel) {
    return uvec2(pixel >> 8, pixel & 0xFFu);
}

uint EncodeShadow(uvec2 pixel) {
    return (pixel.x << 8) | pixel.y;
}

float CompareShadow(uint pixel, uint z) {
    uvec2 p = DecodeShadow(pixel);
    return mix(float(p.y) * (1.0 / 255.0), 0.0, p.x <= z);
}

float SampleShadow2D(ivec2 uv, uint z) {
    if (any(bvec4( lessThan(uv, ivec2(0)), greaterThanEqual(uv, imageSize(shadow_texture_px)) )))
        return 1.0;
    return CompareShadow(imageLoad(shadow_texture_px, uv).x, z);
}

float mix2(vec4 s, vec2 a) {
    vec2 t = mix(s.xy, s.zw, a.yy);
    return mix(t.x, t.y, a.x);
}

vec4 shadowTexture(vec2 uv, float w) {
uint z = uint(max(0, int(min(abs(w), 1.0) * float(0xFFFFFF)) - shadow_texture_bias));
    vec2 coord = vec2(imageSize(shadow_texture_px)) * uv - vec2(0.5);
    vec2 coord_floor = floor(coord);
    vec2 f = coord - coord_floor;
    ivec2 i = ivec2(coord_floor);
    vec4 s = vec4(
        SampleShadow2D(i              , z),
        SampleShadow2D(i + ivec2(1, 0), z),
        SampleShadow2D(i + ivec2(0, 1), z),
        SampleShadow2D(i + ivec2(1, 1), z));
    return vec4(mix2(s, f));
}

vec4 shadowTextureCube(vec2 uv, float w) {
    ivec2 size = imageSize(shadow_texture_px);
    vec3 c = vec3(uv, w);
    vec3 a = abs(c);
    if (a.x > a.y && a.x > a.z) {
        w = a.x;
        uv = -c.zy;
        if (c.x < 0.0) uv.x = -uv.x;
    } else if (a.y > a.z) {
        w = a.y;
        uv = c.xz;
        if (c.y < 0.0) uv.y = -uv.y;
    } else {
        w = a.z;
        uv = -c.xy;
        if (c.z > 0.0) uv.x = -uv.x;
    }
uint z = uint(max(0, int(min(w, 1.0) * float(0xFFFFFF)) - shadow_texture_bias));
    vec2 coord = vec2(size) * (uv / w * vec2(0.5) + vec2(0.5)) - vec2(0.5);
    vec2 coord_floor = floor(coord);
    vec2 f = coord - coord_floor;
    ivec2 i00 = ivec2(coord_floor);
    ivec2 i10 = i00 + ivec2(1, 0);
    ivec2 i01 = i00 + ivec2(0, 1);
    ivec2 i11 = i00 + ivec2(1, 1);
    ivec2 cmin = ivec2(0), cmax = size - ivec2(1, 1);
    i00 = clamp(i00, cmin, cmax);
    i10 = clamp(i10, cmin, cmax);
    i01 = clamp(i01, cmin, cmax);
    i11 = clamp(i11, cmin, cmax);
    uvec4 pixels;
    // This part should have been refactored into functions,
    // but many drivers don't like passing uimage2D as parameters
    if (a.x > a.y && a.x > a.z) {
        if (c.x > 0.0)
            pixels = uvec4(
                imageLoad(shadow_texture_px, i00).r,
                imageLoad(shadow_texture_px, i10).r,
                imageLoad(shadow_texture_px, i01).r,
                imageLoad(shadow_texture_px, i11).r);
        else
            pixels = uvec4(
                imageLoad(shadow_texture_nx, i00).r,
                imageLoad(shadow_texture_nx, i10).r,
                imageLoad(shadow_texture_nx, i01).r,
                imageLoad(shadow_texture_nx, i11).r);
    } else if (a.y > a.z) {
        if (c.y > 0.0)
            pixels = uvec4(
                imageLoad(shadow_texture_py, i00).r,
                imageLoad(shadow_texture_py, i10).r,
                imageLoad(shadow_texture_py, i01).r,
                imageLoad(shadow_texture_py, i11).r);
        else
            pixels = uvec4(
                imageLoad(shadow_texture_ny, i00).r,
                imageLoad(shadow_texture_ny, i10).r,
                imageLoad(shadow_texture_ny, i01).r,
                imageLoad(shadow_texture_ny, i11).r);
    } else {
        if (c.z > 0.0)
            pixels = uvec4(
                imageLoad(shadow_texture_pz, i00).r,
                imageLoad(shadow_texture_pz, i10).r,
                imageLoad(shadow_texture_pz, i01).r,
                imageLoad(shadow_texture_pz, i11).r);
        else
            pixels = uvec4(
                imageLoad(shadow_texture_nz, i00).r,
                imageLoad(shadow_texture_nz, i10).r,
                imageLoad(shadow_texture_nz, i01).r,
                imageLoad(shadow_texture_nz, i11).r);
    }
    vec4 s = vec4(
        CompareShadow(pixels.x, z),
        CompareShadow(pixels.y, z),
        CompareShadow(pixels.z, z),
        CompareShadow(pixels.w, z));
    return vec4(mix2(s, f));
}

#else

vec4 shadowTexture(vec2 uv, float w) {
    return vec4(1.0);
}

vec4 shadowTextureCube(vec2 uv, float w) {
    return vec4(1.0);
}

#endif

void main() {
vec4 rounded_primary_color = byteround(primary_color);
vec4 primary_fragment_color = vec4(0.0);
vec4 secondary_fragment_color = vec4(0.0);
float z_over_w = 2.0 * gl_FragCoord.z - 1.0;
float depth = z_over_w * depth_scale + depth_offset;
vec4 combiner_buffer = vec4(0.0);
vec4 next_combiner_buffer = tev_combiner_buffer_color;
vec4 last_tex_env_out = vec4(0.0);
vec3 color_results_0_1 = const_color[0].rgb;
vec3 color_results_0_2 = const_color[0].rgb;
vec3 color_results_0_3 = const_color[0].rgb;
vec3 color_results_0[3] = vec3[3](color_results_0_1, color_results_0_2, color_results_0_3);
vec3 color_output_0 = byteround(clamp(color_results_0[0], vec3(0.0), vec3(1.0)));
float alpha_results_0[3] = float[3](const_color[0].a, const_color[0].a, const_color[0].a);
float alpha_output_0 = byteround(clamp(alpha_results_0[0], 0.0, 1.0));
last_tex_env_out = vec4(clamp(color_output_0 * 1.0, vec3(0.0), vec3(1.0)), clamp(alpha_output_0 * 1.0, 0.0, 1.0));
combiner_buffer = next_combiner_buffer;
next_combiner_buffer.rgb = last_tex_env_out.rgb;
next_combiner_buffer.a = last_tex_env_out.a;
combiner_buffer = next_combiner_buffer;
combiner_buffer = next_combiner_buffer;
vec3 color_results_3_1 = const_color[3].rgb;
vec3 color_results_3_2 = const_color[3].rgb;
vec3 color_results_3_3 = const_color[3].rgb;
vec3 color_results_3[3] = vec3[3](color_results_3_1, color_results_3_2, color_results_3_3);
vec3 color_output_3 = byteround(clamp(color_results_3[0], vec3(0.0), vec3(1.0)));
float alpha_results_3[3] = float[3](const_color[3].a, const_color[3].a, const_color[3].a);
float alpha_output_3 = byteround(clamp(alpha_results_3[0], 0.0, 1.0));
last_tex_env_out = vec4(clamp(color_output_3 * 1.0, vec3(0.0), vec3(1.0)), clamp(alpha_output_3 * 1.0, 0.0, 1.0));
combiner_buffer = next_combiner_buffer;
vec3 color_results_4_1 = const_color[4].rgb;
vec3 color_results_4_2 = last_tex_env_out.rgb;
vec3 color_results_4_3 = combiner_buffer.rgb;
vec3 color_results_4[3] = vec3[3](color_results_4_1, color_results_4_2, color_results_4_3);
vec3 color_output_4 = byteround(clamp(color_results_4[0] * color_results_4[2] + color_results_4[1] * (vec3(1.0) - color_results_4[2]), vec3(0.0), vec3(1.0)));
float alpha_results_4[3] = float[3](const_color[4].a, last_tex_env_out.a, combiner_buffer.a);
float alpha_output_4 = byteround(clamp(alpha_results_4[0] * alpha_results_4[2] + alpha_results_4[1] * (1.0 - alpha_results_4[2]), 0.0, 1.0));
last_tex_env_out = vec4(clamp(color_output_4 * 1.0, vec3(0.0), vec3(1.0)), clamp(alpha_output_4 * 1.0, 0.0, 1.0));
combiner_buffer = next_combiner_buffer;
vec3 color_results_5_1 = rounded_primary_color.rgb;
vec3 color_results_5_2 = last_tex_env_out.rgb;
vec3 color_results_5_3 = last_tex_env_out.rgb;
vec3 color_results_5[3] = vec3[3](color_results_5_1, color_results_5_2, color_results_5_3);
vec3 color_output_5 = byteround(clamp(color_results_5[0] * color_results_5[1], vec3(0.0), vec3(1.0)));
float alpha_results_5[3] = float[3](rounded_primary_color.a, last_tex_env_out.a, last_tex_env_out.a);
float alpha_output_5 = byteround(clamp(alpha_results_5[0] * alpha_results_5[1], 0.0, 1.0));
last_tex_env_out = vec4(clamp(color_output_5 * 1.0, vec3(0.0), vec3(1.0)), clamp(alpha_output_5 * 1.0, 0.0, 1.0));
combiner_buffer = next_combiner_buffer;
gl_FragDepth = depth;
color = byteround(last_tex_env_out);
}
[  27.138936] Render.OpenGL <Error> video_core/renderer_opengl/gl_shader_util.cpp:LoadProgram:102: Error linking shader:
Program Link Failed for unknown reason.

[  27.138937] Debug <Critical> video_core/renderer_opengl/gl_shader_util.cpp:operator():106: Assertion Failed!
Shader not linked```

The important part may be in the last two lines. 

Herpderpus666 avatar Jul 27 '22 23:07 Herpderpus666

Same error on an RX 6500XT - Looks like 22.7.1 nuked something. >.>

squeeglii avatar Jul 27 '22 23:07 squeeglii

From what I hear AMD marked features OGL 3.4 that are really 3.3 (ergo a 3.3 app like Citra can't use them), so blame them.

Efadd avatar Jul 28 '22 03:07 Efadd

Hello, is there any other software that could be affected by this issue? I could send them a bug report using their tool but I fear they may just ignore bug reports for "shady piracy emulator" (yes I know the software is not piracy or shady but that's how normies perceive emulators) . Either way, it's there any chance the Citra team may implement a workaround, or the only way to use Citra again would be to downgrade the AMD drivers?

Herpderpus666 avatar Jul 29 '22 09:07 Herpderpus666

Hello, is there any other software that could be affected by this issue? I could send them a bug report using their tool but I fear they may just ignore bug reports for "shady piracy emulator" (yes I know the software is not piracy or shady but that's how normies perceive emulators) . Either way, it's there any chance the Citra team may implement a workaround, or the only way to use Citra again would be to downgrade the AMD drivers?

Report anyway, since its their fault, no matter what was affected.

BTW, same error on RX 5600 XT

EDIT: New driver, same issue. =\

Undeon avatar Aug 12 '22 02:08 Undeon

There's a workaround for this issue in Canary at the moment: https://github.com/citra-emu/citra/pull/6079

SleepingSnakezzz avatar Aug 14 '22 10:08 SleepingSnakezzz