--- mesa-22.2.3/src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c 2022-11-07 19:01:13.000000000 +0100 +++ mesa-22.2.3/src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c 2022-12-13 14:12:57.178651681 +0100 @@ -206,6 +206,7 @@ bool pipe_loader_sw_probe_dri(struct pipe_loader_device **devs, const struct drisw_loader_funcs *drisw_lf) { struct pipe_loader_sw_device *sdev = CALLOC_STRUCT(pipe_loader_sw_device); + struct sw_winsys *(*create_winsys)(const struct drisw_loader_funcs *); int i; if (!sdev) @@ -216,7 +217,8 @@ pipe_loader_sw_probe_dri(struct pipe_loa for (i = 0; sdev->dd->winsys[i].name; i++) { if (strcmp(sdev->dd->winsys[i].name, "dri") == 0) { - sdev->ws = sdev->dd->winsys[i].create_winsys(drisw_lf); + create_winsys = sdev->dd->winsys[i].create_winsys; + sdev->ws = create_winsys(drisw_lf); break; } } @@ -236,6 +238,7 @@ bool pipe_loader_vk_probe_dri(struct pipe_loader_device **devs, const struct drisw_loader_funcs *drisw_lf) { struct pipe_loader_sw_device *sdev = CALLOC_STRUCT(pipe_loader_sw_device); + struct sw_winsys *(*create_winsys)(const struct drisw_loader_funcs *); int i; if (!sdev) @@ -246,7 +249,8 @@ pipe_loader_vk_probe_dri(struct pipe_loa for (i = 0; sdev->dd->winsys[i].name; i++) { if (strcmp(sdev->dd->winsys[i].name, "dri") == 0) { - sdev->ws = sdev->dd->winsys[i].create_winsys(drisw_lf); + create_winsys = sdev->dd->winsys[i].create_winsys; + sdev->ws = create_winsys(drisw_lf); break; } } @@ -269,6 +273,7 @@ bool pipe_loader_sw_probe_kms(struct pipe_loader_device **devs, int fd) { struct pipe_loader_sw_device *sdev = CALLOC_STRUCT(pipe_loader_sw_device); + struct sw_winsys *(*create_winsys)(int); int i; if (!sdev) @@ -282,7 +287,8 @@ pipe_loader_sw_probe_kms(struct pipe_loa for (i = 0; sdev->dd->winsys[i].name; i++) { if (strcmp(sdev->dd->winsys[i].name, "kms_dri") == 0) { - sdev->ws = sdev->dd->winsys[i].create_winsys(sdev->fd); + create_winsys = sdev->dd->winsys[i].create_winsys; + sdev->ws = create_winsys(sdev->fd); break; } } @@ -305,6 +311,7 @@ bool pipe_loader_sw_probe_null(struct pipe_loader_device **devs) { struct pipe_loader_sw_device *sdev = CALLOC_STRUCT(pipe_loader_sw_device); + struct sw_winsys *(*create_winsys)(void); int i; if (!sdev) @@ -315,7 +322,8 @@ pipe_loader_sw_probe_null(struct pipe_lo for (i = 0; sdev->dd->winsys[i].name; i++) { if (strcmp(sdev->dd->winsys[i].name, "null") == 0) { - sdev->ws = sdev->dd->winsys[i].create_winsys(); + create_winsys = sdev->dd->winsys[i].create_winsys; + sdev->ws = create_winsys(); break; } } @@ -350,6 +358,7 @@ pipe_loader_sw_probe_wrapped(struct pipe struct pipe_screen *screen) { struct pipe_loader_sw_device *sdev = CALLOC_STRUCT(pipe_loader_sw_device); + struct sw_winsys *(*create_winsys)(struct pipe_screen *); int i; if (!sdev) @@ -360,7 +369,8 @@ pipe_loader_sw_probe_wrapped(struct pipe for (i = 0; sdev->dd->winsys[i].name; i++) { if (strcmp(sdev->dd->winsys[i].name, "wrapped") == 0) { - sdev->ws = sdev->dd->winsys[i].create_winsys(screen); + create_winsys = sdev->dd->winsys[i].create_winsys; + sdev->ws = create_winsys(screen); break; } }