[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openbsd-ports
Subject:    Re: Widelands crash fix
From:       Thomas Frohwein <tfrohwein () fastmail ! com>
Date:       2023-09-29 13:06:37
Message-ID: ZRbL3fGa4bD9aWkC () frankenputer
[Download RAW message or body]

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);
> 

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic