diff options
Diffstat (limited to 'recipes-graphics/xorg-xserver/xserver-xorg/0008-glamor-Introduce-a-central-place-for-our-pixmap-form.patch')
-rw-r--r-- | recipes-graphics/xorg-xserver/xserver-xorg/0008-glamor-Introduce-a-central-place-for-our-pixmap-form.patch | 669 |
1 files changed, 0 insertions, 669 deletions
diff --git a/recipes-graphics/xorg-xserver/xserver-xorg/0008-glamor-Introduce-a-central-place-for-our-pixmap-form.patch b/recipes-graphics/xorg-xserver/xserver-xorg/0008-glamor-Introduce-a-central-place-for-our-pixmap-form.patch deleted file mode 100644 index dd82340a..00000000 --- a/recipes-graphics/xorg-xserver/xserver-xorg/0008-glamor-Introduce-a-central-place-for-our-pixmap-form.patch +++ /dev/null @@ -1,669 +0,0 @@ -From b75296bee6ab3578f3a13cfb6de5d77ec02b9047 Mon Sep 17 00:00:00 2001 -From: Eric Anholt <eric@anholt.net> -Date: Tue, 26 Mar 2019 15:10:49 -0700 -Subject: [PATCH 8/8] glamor: Introduce a central place for our pixmap - format/type handling. - -We had various helper functions trying to come up with the -internalformat/format/type/render formats for pixmaps, and it's much -nicer to just detect what those should be once at startup. This gives -us a chance to do the right thing for GLES. - -It also, notably, fixes our format/type for depth 15 and 16 setup for -desktop GL, so that we actually allocate 16bpp (GL_RGB/565) on most -drivers instead of 32bpp (GL_RGB/UBYTE). - -GLES still has regressions over desktop (2 regressions in llvmpipe -XTS, many in rendercheck), but I think this is a good baseline. - -Upstream-Status: Backport -Signed-off-by: Eric Anholt <eric@anholt.net> ---- - glamor/glamor.c | 167 ++++++++++++++++++++++++++++++++++++-- - glamor/glamor_fbo.c | 16 ++-- - glamor/glamor_picture.c | 7 +- - glamor/glamor_priv.h | 22 ++++- - glamor/glamor_render.c | 7 +- - glamor/glamor_spans.c | 14 ++-- - glamor/glamor_transfer.c | 56 ++----------- - glamor/glamor_transfer.h | 3 - - glamor/glamor_transform.c | 5 +- - glamor/glamor_utils.h | 57 ------------- - 10 files changed, 209 insertions(+), 145 deletions(-) - -diff --git a/glamor/glamor.c b/glamor/glamor.c -index 019edbbb1..3450113e0 100644 ---- a/glamor/glamor.c -+++ b/glamor/glamor.c -@@ -212,7 +212,7 @@ glamor_create_pixmap(ScreenPtr screen, int w, int h, int depth, - w <= glamor_priv->glyph_max_dim && - h <= glamor_priv->glyph_max_dim) - || (w == 0 && h == 0) -- || !glamor_check_pixmap_fbo_depth(depth))) -+ || !glamor_priv->formats[depth].format)) - return fbCreatePixmap(screen, w, h, depth, usage); - else - pixmap = fbCreatePixmap(screen, 0, 0, depth, usage); -@@ -440,6 +440,165 @@ glamor_setup_debug_output(ScreenPtr screen) - glEnable(GL_DEBUG_OUTPUT); - } - -+const struct glamor_format * -+glamor_format_for_pixmap(PixmapPtr pixmap) -+{ -+ ScreenPtr pScreen = pixmap->drawable.pScreen; -+ glamor_screen_private *glamor_priv = glamor_get_screen_private(pScreen); -+ glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap); -+ -+ if (pixmap_priv->is_cbcr) -+ return &glamor_priv->cbcr_format; -+ else -+ return &glamor_priv->formats[pixmap->drawable.depth]; -+} -+ -+static void -+glamor_add_format(ScreenPtr screen, int depth, CARD32 render_format, -+ GLenum internalformat, GLenum format, GLenum type) -+{ -+ glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); -+ struct glamor_format *f = &glamor_priv->formats[depth]; -+ -+ /* If we're trying to run on GLES, make sure that we get the read -+ * formats that we're expecting, since glamor_transfer relies on -+ * them matching to get data back out. To avoid this limitation, we -+ * would need to have a more general glReadPixels() path in -+ * glamor_transfer that re-encoded the bits to the pixel format that -+ * we intended after. -+ * -+ * Note that we can't just create a pixmap because we're in -+ * screeninit. -+ */ -+ if (glamor_priv->is_gles) { -+ unsigned fbo, tex; -+ int read_format, read_type; -+ GLenum status; -+ -+ glGenTextures(1, &tex); -+ glBindTexture(GL_TEXTURE_2D, tex); -+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); -+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); -+ glTexImage2D(GL_TEXTURE_2D, 0, internalformat, 1, 1, 0, -+ format, type, NULL); -+ -+ glGenFramebuffers(1, &fbo); -+ glBindFramebuffer(GL_FRAMEBUFFER, fbo); -+ glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, -+ GL_TEXTURE_2D, tex, 0); -+ status = glCheckFramebufferStatus(GL_FRAMEBUFFER); -+ if (status != GL_FRAMEBUFFER_COMPLETE) { -+ ErrorF("glamor: Test fbo for depth %d incomplete. " -+ "Falling back to software.\n", depth); -+ glDeleteTextures(1, &tex); -+ glDeleteFramebuffers(1, &fbo); -+ return; -+ } -+ -+ glGetIntegerv(GL_IMPLEMENTATION_COLOR_READ_FORMAT, &read_format); -+ glGetIntegerv(GL_IMPLEMENTATION_COLOR_READ_TYPE, &read_type); -+ -+ glDeleteTextures(1, &tex); -+ glDeleteFramebuffers(1, &fbo); -+ -+ if (format != read_format || type != read_type) { -+ ErrorF("glamor: Implementation returned 0x%x/0x%x read format/type " -+ "for depth %d, expected 0x%x/0x%x. " -+ "Falling back to software.\n", -+ read_format, read_type, depth, format, type); -+ return; -+ } -+ } -+ -+ f->depth = depth; -+ f->render_format = render_format; -+ f->internalformat = internalformat; -+ f->format = format; -+ f->type = type; -+} -+ -+/* Set up the GL format/types that glamor will use for the various depths -+ * -+ * X11's pixel data doesn't have channels, but to store our data in GL -+ * we have to pick some sort of format to move X11 pixel data in and -+ * out with in glamor_transfer.c. For X11 core operations, other than -+ * GL logic ops (non-GXcopy GC ops) what the driver chooses internally -+ * doesn't matter as long as it doesn't drop any bits (we expect them -+ * to generally expand, if anything). For Render, we can expect -+ * clients to tend to render with PictFormats matching our channel -+ * layouts here since ultimately X11 pixels tend to end up on the -+ * screen. The render implementation will fall back to fb if the -+ * channels don't match. -+ * -+ * Note that these formats don't affect what glamor_egl.c or -+ * Xwayland's EGL layer choose for surfaces exposed through DRI or -+ * scanout. For now, those layers need to match what we're choosing -+ * here, or channels will end up swizzled around. Similarly, the -+ * driver's visual masks also need to match what we're doing here. -+ */ -+static void -+glamor_setup_formats(ScreenPtr screen) -+{ -+ glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); -+ -+ /* Prefer r8 textures since they're required by GLES3 and core, -+ * only falling back to a8 if we can't do them. -+ */ -+ if (glamor_priv->is_gles || epoxy_has_gl_extension("GL_ARB_texture_rg")) { -+ glamor_add_format(screen, 8, PICT_a8, -+ GL_R8, GL_RED, GL_UNSIGNED_BYTE); -+ } else { -+ glamor_add_format(screen, 8, PICT_a8, -+ GL_ALPHA, GL_ALPHA, GL_UNSIGNED_BYTE); -+ } -+ -+ if (glamor_priv->is_gles) { -+ /* For 15bpp, GLES supports format/type RGBA/5551, rather than -+ * bgra/1555_rev. GL_EXT_bgra lets the impl say the color -+ * read format/type is bgra/1555 even if we had to create it -+ * with rgba/5551, with Mesa does. That means we can't use -+ * the same format/type for TexSubImage and readpixels. -+ * -+ * Instead, just store 16 bits using the trusted 565 path, and -+ * disable render accel for now. -+ */ -+ glamor_add_format(screen, 15, PICT_x1r5g5b5, -+ GL_RGB5_A1, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1); -+ } else { -+ glamor_add_format(screen, 15, PICT_x1r5g5b5, -+ GL_RGBA, GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV); -+ } -+ -+ glamor_add_format(screen, 16, PICT_r5g6b5, -+ GL_RGB, GL_RGB, GL_UNSIGNED_SHORT_5_6_5); -+ -+ if (glamor_priv->is_gles) { -+ assert(X_BYTE_ORDER == X_LITTLE_ENDIAN); -+ glamor_add_format(screen, 24, PICT_x8b8g8r8, -+ GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE); -+ glamor_add_format(screen, 32, PICT_a8b8g8r8, -+ GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE); -+ } else { -+ glamor_add_format(screen, 24, PICT_x8r8g8b8, -+ GL_RGBA, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV); -+ glamor_add_format(screen, 32, PICT_a8r8g8b8, -+ GL_RGBA, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV); -+ } -+ -+ if (glamor_priv->is_gles) { -+ glamor_add_format(screen, 30, PICT_x2b10g10r10, -+ GL_RGB10_A2, GL_RGBA, GL_UNSIGNED_INT_2_10_10_10_REV); -+ } else { -+ glamor_add_format(screen, 30, PICT_x2r10g10b10, -+ GL_RGB10_A2, GL_BGRA, GL_UNSIGNED_INT_2_10_10_10_REV); -+ } -+ -+ glamor_priv->cbcr_format.depth = 16; -+ glamor_priv->cbcr_format.internalformat = GL_RG8; -+ glamor_priv->cbcr_format.format = GL_RG; -+ glamor_priv->cbcr_format.type = GL_UNSIGNED_BYTE; -+} -+ - /** Set up glamor for an already-configured GL context. */ - Bool - glamor_init(ScreenPtr screen, unsigned int flags) -@@ -665,11 +824,7 @@ glamor_init(ScreenPtr screen, unsigned int flags) - (epoxy_has_gl_extension("GL_ARB_texture_swizzle") || - (glamor_priv->is_gles && gl_version >= 30)); - -- glamor_priv->one_channel_format = GL_ALPHA; -- if (epoxy_has_gl_extension("GL_ARB_texture_rg") && -- glamor_priv->has_texture_swizzle) { -- glamor_priv->one_channel_format = GL_RED; -- } -+ glamor_setup_formats(screen); - - glamor_set_debug_level(&glamor_debug_level); - -diff --git a/glamor/glamor_fbo.c b/glamor/glamor_fbo.c -index 75f7e2baa..dfb3f754d 100644 ---- a/glamor/glamor_fbo.c -+++ b/glamor/glamor_fbo.c -@@ -97,7 +97,7 @@ glamor_pixmap_fbo * - glamor_create_fbo_from_tex(glamor_screen_private *glamor_priv, - PixmapPtr pixmap, int w, int h, GLint tex, int flag) - { -- GLenum format = gl_iformat_for_pixmap(pixmap); -+ const struct glamor_format *f = glamor_format_for_pixmap(pixmap); - glamor_pixmap_fbo *fbo; - - fbo = calloc(1, sizeof(*fbo)); -@@ -107,7 +107,7 @@ glamor_create_fbo_from_tex(glamor_screen_private *glamor_priv, - fbo->tex = tex; - fbo->width = w; - fbo->height = h; -- fbo->is_red = format == GL_RED; -+ fbo->is_red = f->format == GL_RED; - - if (flag != GLAMOR_CREATE_FBO_NO_FBO) { - if (glamor_pixmap_ensure_fb(glamor_priv, fbo) != 0) { -@@ -123,23 +123,19 @@ static int - _glamor_create_tex(glamor_screen_private *glamor_priv, - PixmapPtr pixmap, int w, int h) - { -- GLenum iformat = gl_iformat_for_pixmap(pixmap); -- GLenum format = iformat; -+ const struct glamor_format *f = glamor_format_for_pixmap(pixmap); - unsigned int tex; - -- if (format == GL_RGB10_A2) -- format = GL_RGBA; -- - glamor_make_current(glamor_priv); - glGenTextures(1, &tex); - glBindTexture(GL_TEXTURE_2D, tex); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); -- if (format == glamor_priv->one_channel_format && format == GL_RED) -+ if (f->format == GL_RED) - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, GL_RED); - glamor_priv->suppress_gl_out_of_memory_logging = true; -- glTexImage2D(GL_TEXTURE_2D, 0, iformat, w, h, 0, -- format, GL_UNSIGNED_BYTE, NULL); -+ glTexImage2D(GL_TEXTURE_2D, 0, f->internalformat, w, h, 0, -+ f->format, f->type, NULL); - glamor_priv->suppress_gl_out_of_memory_logging = false; - - if (glGetError() == GL_OUT_OF_MEMORY) { -diff --git a/glamor/glamor_picture.c b/glamor/glamor_picture.c -index ed2decc83..33b3bebd9 100644 ---- a/glamor/glamor_picture.c -+++ b/glamor/glamor_picture.c -@@ -83,7 +83,7 @@ glamor_get_tex_format_type_from_pictformat(ScreenPtr pScreen, - - switch (format) { - case PICT_a1: -- *tex_format = glamor_priv->one_channel_format; -+ *tex_format = glamor_priv->formats[1].format; - *tex_type = GL_UNSIGNED_BYTE; - *temp_format = PICT_a8; - break; -@@ -195,7 +195,7 @@ glamor_get_tex_format_type_from_pictformat(ScreenPtr pScreen, - break; - - case PICT_a8: -- *tex_format = glamor_priv->one_channel_format; -+ *tex_format = glamor_priv->formats[8].format; - *tex_type = GL_UNSIGNED_BYTE; - break; - -@@ -286,6 +286,7 @@ glamor_upload_picture_to_texture(PicturePtr picture) - Bool ret = TRUE; - Bool needs_swizzle; - pixman_image_t *converted_image = NULL; -+ const struct glamor_format *f = glamor_format_for_pixmap(pixmap); - - assert(glamor_pixmap_is_memory(pixmap)); - assert(!pixmap_priv->fbo); -@@ -336,7 +337,7 @@ glamor_upload_picture_to_texture(PicturePtr picture) - } - - if (!glamor_priv->is_gles) -- iformat = gl_iformat_for_pixmap(pixmap); -+ iformat = f->internalformat; - else - iformat = format; - -diff --git a/glamor/glamor_priv.h b/glamor/glamor_priv.h -index 8e8433ff3..b8e2b932e 100644 ---- a/glamor/glamor_priv.h -+++ b/glamor/glamor_priv.h -@@ -157,6 +157,21 @@ struct glamor_pixmap_private; - - #define GLAMOR_COMPOSITE_VBO_VERT_CNT (64*1024) - -+struct glamor_format { -+ /** X Server's "depth" value */ -+ int depth; -+ /** GL internalformat for creating textures of this type */ -+ GLenum internalformat; -+ /** GL format transferring pixels in/out of textures of this type. */ -+ GLenum format; -+ /** GL type transferring pixels in/out of textures of this type. */ -+ GLenum type; -+ /* Render PICT_* matching GL's channel layout for pixels -+ * transferred using format/type. -+ */ -+ CARD32 render_format; -+}; -+ - struct glamor_saved_procs { - CloseScreenProcPtr close_screen; - CreateGCProcPtr create_gc; -@@ -199,7 +214,8 @@ typedef struct glamor_screen_private { - Bool can_copyplane; - int max_fbo_size; - -- GLuint one_channel_format; -+ struct glamor_format formats[33]; -+ struct glamor_format cbcr_format; - - /* glamor point shader */ - glamor_program point_prog; -@@ -537,6 +553,8 @@ void glamor_pixmap_destroy_fbo(PixmapPtr pixmap); - Bool glamor_pixmap_fbo_fixup(ScreenPtr screen, PixmapPtr pixmap); - void glamor_pixmap_clear_fbo(glamor_screen_private *glamor_priv, glamor_pixmap_fbo *fbo); - -+const struct glamor_format *glamor_format_for_pixmap(PixmapPtr pixmap); -+ - /* Return whether 'picture' is alpha-only */ - static inline Bool glamor_picture_is_alpha(PicturePtr picture) - { -@@ -549,7 +567,7 @@ glamor_picture_red_is_alpha(PicturePtr picture) - { - /* True when the picture is alpha only and the screen is using GL_RED for alpha pictures */ - return glamor_picture_is_alpha(picture) && -- glamor_get_screen_private(picture->pDrawable->pScreen)->one_channel_format == GL_RED; -+ glamor_get_screen_private(picture->pDrawable->pScreen)->formats[8].format == GL_RED; - } - - void glamor_bind_texture(glamor_screen_private *glamor_priv, -diff --git a/glamor/glamor_render.c b/glamor/glamor_render.c -index d3859e4d1..a8dc3924b 100644 ---- a/glamor/glamor_render.c -+++ b/glamor/glamor_render.c -@@ -772,12 +772,15 @@ static Bool - glamor_render_format_is_supported(PicturePtr picture) - { - PictFormatShort storage_format; -+ glamor_screen_private *glamor_priv; - - /* Source-only pictures should always work */ - if (!picture->pDrawable) - return TRUE; - -- storage_format = format_for_depth(picture->pDrawable->depth); -+ glamor_priv = glamor_get_screen_private(picture->pDrawable->pScreen); -+ storage_format = -+ glamor_priv->formats[picture->pDrawable->depth].render_format; - - switch (picture->format) { - case PICT_x2r10g10b10: -@@ -898,7 +901,7 @@ glamor_composite_choose_shader(CARD8 op, - } - - if (dest_pixmap->drawable.bitsPerPixel <= 8 && -- glamor_priv->one_channel_format == GL_RED) { -+ glamor_priv->formats[8].format == GL_RED) { - key.dest_swizzle = SHADER_DEST_SWIZZLE_ALPHA_TO_RED; - } else { - key.dest_swizzle = SHADER_DEST_SWIZZLE_DEFAULT; -diff --git a/glamor/glamor_spans.c b/glamor/glamor_spans.c -index b3c028d67..b5f297d2f 100644 ---- a/glamor/glamor_spans.c -+++ b/glamor/glamor_spans.c -@@ -187,9 +187,8 @@ glamor_get_spans_gl(DrawablePtr drawable, int wmax, - int box_index; - int n; - char *d; -- GLenum type; -- GLenum format; - int off_x, off_y; -+ const struct glamor_format *f = glamor_format_for_pixmap(pixmap); - - pixmap_priv = glamor_get_pixmap_private(pixmap); - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) -@@ -197,8 +196,6 @@ glamor_get_spans_gl(DrawablePtr drawable, int wmax, - - glamor_get_drawable_deltas(drawable, pixmap, &off_x, &off_y); - -- glamor_format_for_pixmap(pixmap, &format, &type); -- - glamor_make_current(glamor_priv); - - glamor_pixmap_loop(pixmap_priv, box_index) { -@@ -234,7 +231,8 @@ glamor_get_spans_gl(DrawablePtr drawable, int wmax, - if (y >= box->y2) - continue; - -- glReadPixels(x1 - box->x1, y - box->y1, x2 - x1, 1, format, type, l); -+ glReadPixels(x1 - box->x1, y - box->y1, x2 - x1, 1, -+ f->format, f->type, l); - } - } - -@@ -269,11 +267,10 @@ glamor_set_spans_gl(DrawablePtr drawable, GCPtr gc, char *src, - glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); - PixmapPtr pixmap = glamor_get_drawable_pixmap(drawable); - glamor_pixmap_private *pixmap_priv; -+ const struct glamor_format *f = glamor_format_for_pixmap(pixmap); - int box_index; - int n; - char *s; -- GLenum type; -- GLenum format; - int off_x, off_y; - - pixmap_priv = glamor_get_pixmap_private(pixmap); -@@ -287,7 +284,6 @@ glamor_set_spans_gl(DrawablePtr drawable, GCPtr gc, char *src, - goto bail; - - glamor_get_drawable_deltas(drawable, pixmap, &off_x, &off_y); -- glamor_format_for_pixmap(pixmap, &format, &type); - - glamor_make_current(glamor_priv); - -@@ -348,7 +344,7 @@ glamor_set_spans_gl(DrawablePtr drawable, GCPtr gc, char *src, - - glTexSubImage2D(GL_TEXTURE_2D, 0, - x1 - box->x1, y1 - box->y1, x2 - x1, 1, -- format, type, -+ f->format, f->type, - l); - } - s += PixmapBytePad(w, drawable->depth); -diff --git a/glamor/glamor_transfer.c b/glamor/glamor_transfer.c -index 215752d7b..e706e0fb4 100644 ---- a/glamor/glamor_transfer.c -+++ b/glamor/glamor_transfer.c -@@ -23,44 +23,6 @@ - #include "glamor_priv.h" - #include "glamor_transfer.h" - --/* XXX a kludge for now */ --void --glamor_format_for_pixmap(PixmapPtr pixmap, GLenum *format, GLenum *type) --{ -- glamor_pixmap_private *priv = glamor_get_pixmap_private(pixmap); -- switch (pixmap->drawable.depth) { -- case 24: -- case 32: -- *format = GL_BGRA; -- *type = GL_UNSIGNED_INT_8_8_8_8_REV; -- break; -- case 30: -- *format = GL_BGRA; -- *type = GL_UNSIGNED_INT_2_10_10_10_REV; -- break; -- case 16: -- if (priv->is_cbcr) { -- *format = GL_RG; -- *type = GL_UNSIGNED_BYTE; -- } else { -- *format = GL_RGB; -- *type = GL_UNSIGNED_SHORT_5_6_5; -- } -- break; -- case 15: -- *format = GL_BGRA; -- *type = GL_UNSIGNED_SHORT_1_5_5_5_REV; -- break; -- case 8: -- *format = glamor_get_screen_private(pixmap->drawable.pScreen)->one_channel_format; -- *type = GL_UNSIGNED_BYTE; -- break; -- default: -- FatalError("Invalid pixmap depth %d\n", pixmap->drawable.depth); -- break; -- } --} -- - /* - * Write a region of bits into a pixmap - */ -@@ -75,10 +37,7 @@ glamor_upload_boxes(PixmapPtr pixmap, BoxPtr in_boxes, int in_nbox, - glamor_pixmap_private *priv = glamor_get_pixmap_private(pixmap); - int box_index; - int bytes_per_pixel = pixmap->drawable.bitsPerPixel >> 3; -- GLenum type; -- GLenum format; -- -- glamor_format_for_pixmap(pixmap, &format, &type); -+ const struct glamor_format *f = glamor_format_for_pixmap(pixmap); - - glamor_make_current(glamor_priv); - -@@ -116,14 +75,14 @@ glamor_upload_boxes(PixmapPtr pixmap, BoxPtr in_boxes, int in_nbox, - glTexSubImage2D(GL_TEXTURE_2D, 0, - x1 - box->x1, y1 - box->y1, - x2 - x1, y2 - y1, -- format, type, -+ f->format, f->type, - bits + ofs); - } else { - for (; y1 < y2; y1++, ofs += byte_stride) - glTexSubImage2D(GL_TEXTURE_2D, 0, - x1 - box->x1, y1 - box->y1, - x2 - x1, 1, -- format, type, -+ f->format, f->type, - bits + ofs); - } - } -@@ -178,10 +137,7 @@ glamor_download_boxes(PixmapPtr pixmap, BoxPtr in_boxes, int in_nbox, - glamor_pixmap_private *priv = glamor_get_pixmap_private(pixmap); - int box_index; - int bytes_per_pixel = pixmap->drawable.bitsPerPixel >> 3; -- GLenum type; -- GLenum format; -- -- glamor_format_for_pixmap(pixmap, &format, &type); -+ const struct glamor_format *f = glamor_format_for_pixmap(pixmap); - - glamor_make_current(glamor_priv); - -@@ -216,10 +172,10 @@ glamor_download_boxes(PixmapPtr pixmap, BoxPtr in_boxes, int in_nbox, - - if (glamor_priv->has_pack_subimage || - x2 - x1 == byte_stride / bytes_per_pixel) { -- glReadPixels(x1 - box->x1, y1 - box->y1, x2 - x1, y2 - y1, format, type, bits + ofs); -+ glReadPixels(x1 - box->x1, y1 - box->y1, x2 - x1, y2 - y1, f->format, f->type, bits + ofs); - } else { - for (; y1 < y2; y1++, ofs += byte_stride) -- glReadPixels(x1 - box->x1, y1 - box->y1, x2 - x1, 1, format, type, bits + ofs); -+ glReadPixels(x1 - box->x1, y1 - box->y1, x2 - x1, 1, f->format, f->type, bits + ofs); - } - } - } -diff --git a/glamor/glamor_transfer.h b/glamor/glamor_transfer.h -index de8186a70..a6137b3ff 100644 ---- a/glamor/glamor_transfer.h -+++ b/glamor/glamor_transfer.h -@@ -23,9 +23,6 @@ - #ifndef _GLAMOR_TRANSFER_H_ - #define _GLAMOR_TRANSFER_H_ - --void --glamor_format_for_pixmap(PixmapPtr pixmap, GLenum *format, GLenum *type); -- - void - glamor_upload_boxes(PixmapPtr pixmap, BoxPtr in_boxes, int in_nbox, - int dx_src, int dy_src, -diff --git a/glamor/glamor_transform.c b/glamor/glamor_transform.c -index 2d5a634a8..348d00be1 100644 ---- a/glamor/glamor_transform.c -+++ b/glamor/glamor_transform.c -@@ -121,10 +121,9 @@ glamor_set_color_depth(ScreenPtr pScreen, - - glamor_get_rgba_from_pixel(pixel, - &color[0], &color[1], &color[2], &color[3], -- format_for_depth(depth)); -+ glamor_priv->formats[depth].render_format); - -- if ((depth == 1 || depth == 8) && -- glamor_priv->one_channel_format == GL_RED) -+ if ((depth <= 8) && glamor_priv->formats[8].format == GL_RED) - color[0] = color[3]; - - glUniform4fv(uniform, 1, color); -diff --git a/glamor/glamor_utils.h b/glamor/glamor_utils.h -index cbb808294..651faf2fe 100644 ---- a/glamor/glamor_utils.h -+++ b/glamor/glamor_utils.h -@@ -570,65 +570,8 @@ - && (_w_) <= _glamor_->max_fbo_size \ - && (_h_) <= _glamor_->max_fbo_size) - --/* For 1bpp pixmap, we don't store it as texture. */ --#define glamor_check_pixmap_fbo_depth(_depth_) ( \ -- _depth_ == 8 \ -- || _depth_ == 15 \ -- || _depth_ == 16 \ -- || _depth_ == 24 \ -- || _depth_ == 30 \ -- || _depth_ == 32) -- - #define GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv) (pixmap_priv->gl_fbo == GLAMOR_FBO_NORMAL) - --/** -- * Borrow from uxa. -- */ --static inline CARD32 --format_for_depth(int depth) --{ -- switch (depth) { -- case 1: -- return PICT_a1; -- case 4: -- return PICT_a4; -- case 8: -- return PICT_a8; -- case 15: -- return PICT_x1r5g5b5; -- case 16: -- return PICT_r5g6b5; -- default: -- case 24: -- return PICT_x8r8g8b8; -- case 30: -- return PICT_x2r10g10b10; -- case 32: -- return PICT_a8r8g8b8; -- } --} -- --static inline GLenum --gl_iformat_for_pixmap(PixmapPtr pixmap) --{ -- glamor_screen_private *glamor_priv = -- glamor_get_screen_private((pixmap)->drawable.pScreen); -- glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap); -- -- if (!glamor_priv->is_gles && -- ((pixmap)->drawable.depth == 1 || (pixmap)->drawable.depth == 8)) { -- return glamor_priv->one_channel_format; -- } else if (!glamor_priv->is_gles && -- (pixmap)->drawable.depth == 16 && pixmap_priv->is_cbcr) { -- return GL_RG; -- } else if (!glamor_priv->is_gles && -- (pixmap)->drawable.depth == 30) { -- return GL_RGB10_A2; -- } else { -- return GL_RGBA; -- } --} -- - #define REVERT_NONE 0 - #define REVERT_NORMAL 1 - #define REVERT_UPLOADING_A1 3 --- -2.17.1 - |