[PATCH rendercheck] Skip shmblend if SHM pixmaps aren't supported
Aaron Plattner
aplattner at nvidia.com
Tue Mar 28 17:21:26 UTC 2017
Some drivers don't support SHM pixmaps, but rendercheck doesn't care and tries
to use them anyway. This causes the test to abort:
Beginning SHM blend test from a8
X Error of failed request: BadImplementation (server does not implement operation)
Major opcode of failed request: 130 (MIT-SHM)
Minor opcode of failed request: 5 (X_ShmCreatePixmap)
Serial number of failed request: 805
Current serial number in output stream: 811
X Error of failed request: BadDrawable (invalid Pixmap or Window parameter)
Major opcode of failed request: 139 (RENDER)
Minor opcode of failed request: 4 (RenderCreatePicture)
Resource id in failed request: 0x3200215
Serial number of failed request: 806
Current serial number in output stream: 811
Fix this by skipping the shmblend tests if the extension is missing or doesn't
support pixmaps.
Signed-off-by: Aaron Plattner <aplattner at nvidia.com>
---
On a related note, BadImplementation seems like the wrong error for a client
trying to create SHM pixmaps when they're not supported.
t_shmblend.c | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/t_shmblend.c b/t_shmblend.c
index 752e17a0f8a8..c717f91d7b9b 100644
--- a/t_shmblend.c
+++ b/t_shmblend.c
@@ -47,9 +47,6 @@ get_x_shm_info(Display *dpy, size_t size)
{
XShmSegmentInfo *shm_info = calloc(1, sizeof(*shm_info));
- if (!XShmQueryExtension(dpy))
- return NULL;
-
shm_info->shmid = shmget(IPC_PRIVATE, size, IPC_CREAT|0777);
if (shm_info->shmid < 0) {
free(shm_info);
@@ -225,7 +222,16 @@ static struct rendercheck_test_result
test_shmblend(Display *dpy)
{
struct rendercheck_test_result result = {};
- int i;
+ int major, minor, i;
+ Bool pixmaps_supported;
+
+ if (!XShmQueryExtension(dpy) ||
+ !XShmQueryVersion(dpy, &major, &minor, &pixmaps_supported) ||
+ !pixmaps_supported) {
+ printf("SHM blend test: skipped\n");
+ record_result(&result, true);
+ return result;
+ }
for (i = 0; i < nformats; i++) {
struct render_format *format = &formats[i];
--
2.12.1
More information about the xorg-devel
mailing list