mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 11:48:06 +02:00
dril: Skip some pipe formats to avoid breaking X
In the case where gbm fails to init, we use our entire format list. That became a problem in commit642c4cf2b2when some formats were added to the list that X can't handle. This leads to X crashing when using glx and trying to use certain visuals. An easily testable manifestation of this crash is to run piglit's glx-create-context-ext-no-config-context under Xwayland in a virtual machine that has no gpu, whilst using zink. Much like our CI does for some jobs. Fixes:642c4cf2b2("dril: add BGR{X,A}8888 and RGB{X,A}8888") Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36575>
This commit is contained in:
parent
0d4d73a780
commit
b94add2977
1 changed files with 41 additions and 0 deletions
|
|
@ -454,6 +454,39 @@ out:
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static bool
|
||||
filter_rgba(enum pipe_format color_format)
|
||||
{
|
||||
switch (color_format) {
|
||||
case PIPE_FORMAT_B8G8R8A8_UNORM:
|
||||
case PIPE_FORMAT_B8G8R8X8_UNORM:
|
||||
case PIPE_FORMAT_R8G8B8A8_UNORM:
|
||||
case PIPE_FORMAT_R8G8B8X8_UNORM:
|
||||
case PIPE_FORMAT_B10G10R10A2_UNORM:
|
||||
case PIPE_FORMAT_B10G10R10X2_UNORM:
|
||||
case PIPE_FORMAT_R10G10B10A2_UNORM:
|
||||
case PIPE_FORMAT_R10G10B10X2_UNORM:
|
||||
case PIPE_FORMAT_B5G6R5_UNORM:
|
||||
case PIPE_FORMAT_B5G5R5A1_UNORM:
|
||||
case PIPE_FORMAT_B5G5R5X1_UNORM:
|
||||
case PIPE_FORMAT_B4G4R4A4_UNORM:
|
||||
case PIPE_FORMAT_B4G4R4X4_UNORM:
|
||||
case PIPE_FORMAT_R5G6B5_UNORM:
|
||||
case PIPE_FORMAT_R5G5B5A1_UNORM:
|
||||
case PIPE_FORMAT_R5G5B5X1_UNORM:
|
||||
case PIPE_FORMAT_R4G4B4A4_UNORM:
|
||||
case PIPE_FORMAT_R4G4B4X4_UNORM:
|
||||
return false;
|
||||
/* RGBA modes that break some users */
|
||||
case PIPE_FORMAT_X8R8G8B8_UNORM:
|
||||
case PIPE_FORMAT_A8R8G8B8_UNORM:
|
||||
case PIPE_FORMAT_X8B8G8R8_UNORM:
|
||||
case PIPE_FORMAT_A8B8G8R8_UNORM:
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
static __DRIscreen *
|
||||
drilCreateNewScreen(int scrn, int fd,
|
||||
const __DRIextension **loader_extensions,
|
||||
|
|
@ -468,6 +501,14 @@ drilCreateNewScreen(int scrn, int fd,
|
|||
configs = calloc(ARRAY_SIZE(drilConfigs) * 2 + 1, sizeof(void *));
|
||||
int c = 0;
|
||||
for (int i = 0; i < ARRAY_SIZE(drilConfigs); i++) {
|
||||
/* If GBM init was successful, we'd be checking against a list
|
||||
* of modes already pruned by DRI_LOADER_CAP_RGBA_ORDERING in
|
||||
* dri_fill_in_modes. Let's just throw away RGBA ordered modes
|
||||
* here for safety.
|
||||
*/
|
||||
if (filter_rgba(drilConfigs[i].color_format))
|
||||
continue;
|
||||
|
||||
/* create normal config */
|
||||
configs[c++] = mem_dup(&drilConfigs[i], sizeof(drilConfigs[i]));
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue