http://bugs.winehq.org/show_bug.cgi?id=57797
--- Comment #18 from Richard Yao richard@ryao.dev --- Created attachment 79508 --> http://bugs.winehq.org/attachment.cgi?id=79508 Hack to semi-stub functions to let GeForce Now progress further
When it fails to stream, it prints a key line to geronimo.log:
[2025-05-13 17:21:03,712]=14:21:03= ERROR [DXVADecoderInstance] {00000A8C} - GERONIMO_ERROR 0xC0F1106C GERONIMO_DXVA_DX11_DECODER_FORMAT: DXVA(DX11) CheckVideoDecoderFormat failed.
After switching to the vulkan backend and applying this patch, it now prints this line:
[2025-10-24 05:35:30,814]=01:35:30= ERROR [DXVADecoderInstance] {00000A64} - GERONIMO_ERROR 0xC0F11069 GERONIMO_DXVA_DX11_CREATE_TEXTURE_2D: DXVA(DX11) CreateTexture2D failed.
That is rather interesting, since WINEDEBUG=d3d,d3d11 shows that the texture was made successfully. It also shows that dxgi_resource_GetSharedHandle is a stub:
0a64:fixme:dxgi:dxgi_resource_GetSharedHandle iface 0000000036DDD408, shared_handle 000000000090BAE8 stub!
My theory is that GetSharedHandle is being called on the texture and when dxgi_resource_GetSharedHandle returns that it failed, GeForce Now logs that creating the texture failed. It is a shame since it looks like everything else is in place for it to attempt to decode the video. I say attempt because I found a test program for this:
https://github.com/turanszkij/mini_video
I compiled it by running `x86_64-w64-mingw32-g++ mini_video_dx11.cpp -o mini_video_dx11.exe -std=c++17 -fpermissive -Wall -ffunction-sections -finline-functions -DNDEBUG -D_CONSOLE -D_UNICODE -DUNICODE -O2 -static-libgcc -static-libstdc++ -fexceptions -ld3d11 -ldxgi -ldxguid -ld3dcompiler -luser32 -lkernel32 -O0 -g` after doing a small patch so that the "Linux" version of `firstbitlow()` is used rather than the Windows version, which relies on a compiler intrinsic specific to the MSVC compiler. Running that test program gives me a green screen.
Whether or not that will happen if GeForce Now succeeds is unknown to me. However, it looks like further progress will be blocked on implementing dxgi_resource_GetSharedHandle().