On Fri, Sep 29, 2023 at 04:17:54AM -0600, Anthony J. Bentley wrote:
> volker's recent commit to widelands didn't fix the crash I'm seeing.
> That makes sense, because we compared backtraces and the crash he saw
> was totally different.
> 
> Backporting this patch (labeled as "for Mesa 23.x") fixes my crash.
> 
> ok?

Tested on my Intel Tigerlake iGPU system and still works, so ok thfr@

> Index: Makefile
> ===================================================================
> RCS file: /cvs/ports/games/widelands/Makefile,v
> retrieving revision 1.38
> diff -u -p -r1.38 Makefile
> --- Makefile  28 Sep 2023 20:50:51 -0000      1.38
> +++ Makefile  29 Sep 2023 09:51:01 -0000
> @@ -3,7 +3,7 @@ COMMENT =     economic and military simulati
>  GH_ACCOUNT =         widelands
>  GH_PROJECT =         widelands
>  GH_TAGNAME =         v1.0
> -REVISION =      2
> +REVISION =      3
>  
>  CATEGORIES = games
>  
> Index: patches/patch-src_graphic_texture_cc
> ===================================================================
> RCS file: patches/patch-src_graphic_texture_cc
> diff -N patches/patch-src_graphic_texture_cc
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-src_graphic_texture_cc      29 Sep 2023 09:51:01 -0000
> @@ -0,0 +1,39 @@
> +Backport Mesa 23.x fix from upstream.
> +https://github.com/widelands/widelands/commit/48e5fd48c3f6418ebb53a145177d0417dc96451b
> +
> +Index: src/graphic/texture.cc
> +--- src/graphic/texture.cc.orig
> ++++ src/graphic/texture.cc
> +@@ -116,9 +116,11 @@ Texture::Texture(SDL_Surface* surface, bool intensity)
> +     uint8_t bpp = surface->format->BytesPerPixel;
> + 
> +     if (surface->format->palette || width() != surface->w || height() != 
> surface->h ||
> +-        (bpp != 3 && bpp != 4) || is_bgr_surface(*surface->format)) {
> ++        (bpp != 4) || is_bgr_surface(*surface->format)) {
> +             SDL_Surface* converted = empty_sdl_surface(width(), height());
> +-            assert(converted);
> ++            if (converted == nullptr) {
> ++                    throw wexception("Failed to create SDL_Surface");
> ++            }
> +             SDL_SetSurfaceAlphaMod(converted, SDL_ALPHA_OPAQUE);
> +             SDL_SetSurfaceBlendMode(converted, SDL_BLENDMODE_NONE);
> +             SDL_SetSurfaceAlphaMod(surface, SDL_ALPHA_OPAQUE);
> +@@ -127,16 +129,15 @@ Texture::Texture(SDL_Surface* surface, bool intensity)
> +             SDL_FreeSurface(surface);
> +             surface = converted;
> +             bpp = surface->format->BytesPerPixel;
> ++            assert(bpp == 4);
> +     }
> + 
> +-    const GLenum pixels_format = bpp == 4 ? GL_RGBA : GL_RGB;
> +-
> +     SDL_LockSurface(surface);
> + 
> +     Gl::swap_rows(width(), height(), surface->pitch, bpp, 
> static_cast<uint8_t*>(surface->pixels));
> + 
> +     glTexImage2D(GL_TEXTURE_2D, 0, static_cast<GLint>(intensity ? 
> GL_INTENSITY : GL_RGBA), width(),
> +-                 height(), 0, pixels_format, GL_UNSIGNED_BYTE, 
> surface->pixels);
> ++                 height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, surface->pixels);
> + 
> +     SDL_UnlockSurface(surface);
> +     SDL_FreeSurface(surface);
> 

Reply via email to