Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • chengbo7135/xserver
  • wjp/xserver
  • DemiMarie/xserver
  • alanc/xserver
  • uvas/xserver
  • cl91/xserver
  • heymiaoO/xserver
  • oreaus/xserver
  • stapelberg/xserver
  • PaulKocialkowski/xserver
  • CendioOssman/xserver
  • wiz/xserver
  • maos20008/xserver
  • dougvj/xserver
  • mgorse1/xserver
  • gldrk/xserver
  • TMR5454/xserver
  • Kyawswat/xserver
  • hexiaodong/xserver
  • gilvbp/xserver
  • vliaskov/xserver
  • aarondill/xserver
  • zzyiwei/xserver
  • kleinerm/xserver
  • jcherry/xserver
  • jcristau/xserver
  • nathankidd/xserver
  • jexposit/xserver
  • refi_64/xserver
  • kbrenneman/xserver
  • kupper.pa/xserver
  • LickmeDown/xserver
  • zboszor/xserver
  • jadahl/xserver
  • shadeslayer/xserver
  • mherrb/xserver
  • Julia/xserver
  • twaik/xserver
  • fvalasiad/xserver
  • zzxyb/xserver
  • HermannSW/xserver
  • erwinou/xserver
  • ekurzinger/xserver
  • nacho.resa/xserver
  • agoins/xserver
  • NSUTanghaixiang/xserver
  • p12tic/xserver
  • huxd1532/xserver
  • keithp/xserver
  • vinilokorlok/xserver
  • bbeckett/xserver
  • dslater38/xserver
  • zzag/xserver
  • emersion/xserver
  • djlucas/xserver
  • ccullumbine2018/xserver
  • daniels/xserver
  • llandwerlin/xserver
  • matt335672/xserver
  • doraskayo/xserver
  • afett/xserver
  • XDXTHX/xserver
  • xexaxo/xserver
  • ecurtin/xserver
  • rbernon/xserver
  • pekdon/xserver
  • karolherbst/xserver
  • russellcnv/xserver
  • mbiebl/xserver
  • orbea/xserver
  • vsyrjala/xserver
  • lyudess/xserver
  • manu/xserver
  • lucmann/xserver
  • tholin/xserver
  • yarivb/xserver
  • tmlind/xserver
  • chema/xserver
  • J-Bu/xserver
  • chenhuacai/xserver
  • E5ten/xserver
  • haagch/xserver
  • whot/xserver
  • strassek/xserver
  • mntmn/xserver
  • liyi42/xserver
  • YusufKhan-gamedev/xserver
  • iv-m/xserver
  • vanvugt/xserver
  • Rui511/xserver
  • catap/xserver
  • tjbp/xserver
  • webi123/xserver
  • noblock/xserver
  • freemangordon/xserver
  • xdandys/xserver
  • jbeich/xserver
  • zeising/xserver
  • romangg/xserver
  • pq/xserver
  • azhadchenko/xserver
  • Emantor/xserver
  • carlosg/xserver
  • kwg/xserver
  • pichika/xserver
  • klniu/xserver
  • TAAPArthur/xserver
  • sjoerd/xserver
  • Sjecai2/xserver
  • jturney/xserver
  • pkubaj/xserver
  • os369510/xserver
  • Zamundaaa/xserver
  • Gorg/xserver
  • lkundrak/xserver
  • niveditharau/xserver
  • ForTheReallys/xserver
  • jmonteiro/xserver
  • jocelyn/xserver
  • ThatMG393/xserver
  • fweimer/xserver
  • mlankhorst/xserver
  • marv/xserver
  • dbn/xserver
  • mattrope/xserver
  • coypoop/xserver
  • mwyraz/xserver
  • frog/xserver
  • 3v1n0/xserver
  • awilfox/xserver
  • muesli4/xserver
  • rarbab/xserver
  • yshui/xserver
  • jannau/xserver
  • mikeroyal/xserver
  • andrebsguedes/xserver
  • JeffyCN/xserver
  • ipominov/xserver
  • gtrentalancia/xserver
  • josch/xserver
  • lucyllewy/xserver
  • tomty89/xserver
  • qarmin/xserver
  • tagr/xserver
  • zwenna/xserver
  • bkylerussell/xserver
  • mupuf/xserver
  • zubzub/xserver
  • galaxytgtabiday/xserver
  • OlCe/xserver
  • ashafer/xserver
  • dengbo/xserver
  • valpackett/xserver
  • andreyknyazev077/xserver
  • antonovitch/xserver
  • contactshashanksharma/xserver-fork-shashank
  • akihiko.odaki/xserver
  • sknsean/xserver
  • rnpnr/xserver
  • hitong602/xserver
  • halfline/xserver
  • ismailsiege/xserver
  • dongwonk/xserver
  • Fatton1/xserver
  • GermanAizek/xserver
  • daenzer/xserver
  • FeepingCreature/xserver
  • mvlad/xserver
  • puleglot/xserver
  • smelenius/xserver
  • sewn/xserver
  • kaichuan.hsieh/xserver
  • SimonPilkington/xserver
  • adamdruppe/xserver
  • floppym/xserver
  • trevdave/xserver
  • luke-jr/xserver
  • headrush/xserver
  • davidriley/xserver
  • heitbaum/xserver
  • mrisaacb/xserver
  • goosen78/xserver
  • Ma/xserver
  • gmbr3/xserver
  • tsutsui/xserver
  • sherrodejjohnson/xserver
  • hassoon1986/xserver
  • lanodan/xserver
  • ydc-dadada/xserver
  • wengxt/xserver
  • icenowy/xserver
  • denisfa/xserver
  • StarsGreen/xserver
  • adamjrichter/xserver
  • bigon/xserver
  • djacewicz/xserver
  • davidre/xserver
  • kylin0061/xserver
  • arrowd/xserver
  • ernstp/xserver
  • bbrezillon/xserver
  • penguin42/xserver
  • anarsoul/xserver
  • marvinjr35/xserver
  • gerddie/xserver
  • xry111/xserver
  • psyruss85/xserver
  • volkanorhan/xserver
  • luporl/xserver
  • cbur201592/xserver
  • bphaslett/xserver
  • guillem/xserver
  • haihao/xserver
  • peterh/xserver
  • miztake/xserver
  • zaps166/xserver
  • lostgoat/xserver
  • vfjpl/xserver
  • bentiss/xserver
  • rilian-la-te/xserver
  • wujiangGitHub/xserver
  • cubanismo/xserver
  • arichardson/xserver
  • schreibemirhalt/xserver
  • jsg/xserver
  • karlosrangel337/xserver
  • knisht/xserver
  • manuelcrack642/xserver
  • ross/xserver
  • topimiettinen/xserver
  • davidedmundson/xserver
  • DPA/xserver
  • dkorkmazturk/xserver
  • karamjameelmoore/xserver
  • lihongtao/xserver
  • sthibaul/xserver
  • RyzenDew/xserver
  • christian-rauch/xserver
  • Vivek/xserver
  • peigongdsd/xserver
  • peng.jin/xserver
  • alagner/xserver
  • mehdigh419/xserver
  • dixler/xserver
  • BBaoVanC/xserver
  • Drakulix/xserver
  • Acidburn0zzz/xserver
  • bafanahub/xserver
  • benpicco/xserver
  • yangxiaojuan-loongson/xserver
  • kaocher82/xserver
  • pepp/xserver
  • cgzones/xserver
  • luyn/xserver
  • 1740301466jxz/xserver
  • ids1024/xserver
  • svalaskevicius/xserver
  • ZhiJie.Zhang/xserver
  • metux/xserver
  • eschwartz/xserver
  • jayantpranjal0/xserver
  • hmazlan/xserver
  • kerneltoast/xserver
  • Michaelypk/xserver
  • dottedmag/xserver
  • aplattner/xserver
  • sergiomb/xserver
  • looi/xserver
  • robclark/xserver
  • tzimmermann/xserver
  • vitoux.pascal/xserver
  • aditj/xserver
  • kennylevinsen/xserver
  • Kishore409/xserver
  • Daasin/xserver
  • dirbaio/xserver
  • xinbowang/xserver
  • mwei/xserver
  • SpikyCaterpillar1/xserver
  • devin11911191/xserver
  • xorg/xserver
  • alex-tu-cc/xserver
  • kaniini/xserver
  • jcourreges/xserver
  • n3rdopolis/xserver
  • zagursky/xserver
  • thesamesam/xserver
  • anholt/xserver
  • themaister/xserver
  • jrtc27/xserver
  • JoseExposito/xserver
  • Hi-Angel/xserver
  • City-busz/xserver
  • ydirson/xserver
  • dawnhan/xserver
  • avolkov/xserver
  • meMuszr/xserver
  • dk/xserver
  • cooperch/xserver
  • Tuetuopay/xserver
  • gabifalk/xserver
  • jeremyhu/xserver
  • 1480c1/xserver
  • Spintzyk/xserver
  • MisterDA/xserver
  • starnight/xserver
  • abono/xserver
  • ajax/xserver
  • dougg3/xserver
  • chenx_dust/xserver
  • EXtremeExploit/xserver
  • jwrdegoede/xserver
  • road2react/xserver
  • acelan/xserver
  • airlied/xserver
  • gfxstrand/xorg-xserver
  • justazarsky/xserver
  • sri-ka1ki/xserver
  • rgfernandes/xserver
  • lynxeye/xserver
  • tintou/xserver
  • mattst88/xserver
  • rmader/xserver
  • linkmauve/xserver
  • kamarul6401/xserver
  • andy-zetier/xserver
  • gsittyz/xserver
  • bernhardu/xserver
  • causztic/xserver
  • cpmichael/modesetting
  • ryanneph/xserver
  • zhangyaning/xserver
  • olv/xserver
  • hongaoo/xserver
  • LiChenG-P/xserver
  • Ivaniku/x-taylan
  • dkg/xserver
  • ofourdan/xserver
  • mahkoh/xserver
  • AkiSakurai/xserver
  • msizanoen1/xserver
341 results
Show changes
Commits on Source (4)
......@@ -227,12 +227,10 @@ glamor_composite_rectangles(CARD8 op,
boxes = pixman_region_rectangles(&region, &num_boxes);
if (op == PictOpSrc || op == PictOpClear) {
CARD32 pixel;
int dst_x, dst_y;
glamor_get_drawable_deltas(dst->pDrawable, pixmap, &dst_x, &dst_y);
pixman_region_translate(&region, dst_x, dst_y);
pixman_region_translate(&region, -dst->pDrawable->x, -dst->pDrawable->y);
DEBUGF("%s: pixmap +(%d, %d) extents (%d, %d),(%d, %d)\n",
DEBUGF("%s: drawable extents (%d, %d),(%d, %d)\n",
__FUNCTION__, dst_x, dst_y,
RegionExtents(&region)->x1, RegionExtents(&region)->y1,
RegionExtents(&region)->x2, RegionExtents(&region)->y2);
......@@ -241,7 +239,7 @@ glamor_composite_rectangles(CARD8 op,
pixel = 0;
else
miRenderColorToPixel(dst->pFormat, color, &pixel);
glamor_solid_boxes(pixmap, boxes, num_boxes, pixel);
glamor_solid_boxes(dst->pDrawable, boxes, num_boxes, pixel);
goto done;
}
......
......@@ -77,7 +77,7 @@ use_copyplane(DrawablePtr drawable, GCPtr gc, glamor_program *prog, void *arg)
glamor_set_color(drawable, gc->bgPixel, prog->bg_uniform);
/* XXX handle 2 10 10 10 and 1555 formats; presumably the pixmap private knows this? */
switch (args->src_drawable->depth) {
switch (glamor_drawable_effective_depth(args->src_drawable)) {
case 30:
glUniform4ui(prog->bitplane_uniform,
(args->bitplane >> 20) & 0x3ff,
......@@ -235,7 +235,7 @@ glamor_copy_cpu_fbo(DrawablePtr src,
PixmapPtr tmp_pix = fbCreatePixmap(screen, dst_pixmap->drawable.width,
dst_pixmap->drawable.height,
dst->depth, 0);
glamor_drawable_effective_depth(dst), 0);
if (!tmp_pix) {
glamor_finish_access(src);
......@@ -547,7 +547,7 @@ glamor_copy_fbo_fbo_temp(DrawablePtr src,
tmp_pixmap = glamor_create_pixmap(screen,
bounds.x2 - bounds.x1,
bounds.y2 - bounds.y1,
src->depth, 0);
glamor_drawable_effective_depth(src), 0);
if (!tmp_pixmap)
goto bail;
......@@ -757,7 +757,7 @@ glamor_copy_plane(DrawablePtr src, DrawablePtr dst, GCPtr gc,
int srcx, int srcy, int width, int height, int dstx, int dsty,
unsigned long bitplane)
{
if ((bitplane & FbFullMask(src->depth)) == 0)
if ((bitplane & FbFullMask(glamor_drawable_effective_depth(src))) == 0)
return miHandleExposures(src, dst, gc,
srcx, srcy, width, height, dstx, dsty);
return miDoCopy(src, dst, gc,
......
......@@ -129,7 +129,7 @@ glamor_get_image_gl(DrawablePtr drawable, int x, int y, int w, int h,
-x, -y,
(uint8_t *) d, byte_stride);
if (!glamor_pm_is_solid(drawable->depth, plane_mask)) {
if (!glamor_pm_is_solid(glamor_drawable_effective_depth(drawable), plane_mask)) {
FbStip pm = fbReplicatePixel(plane_mask, drawable->bitsPerPixel);
FbStip *dst = (void *)d;
uint32_t dstStride = byte_stride / sizeof(FbStip);
......
......@@ -163,7 +163,7 @@ glamor_finish_access(DrawablePtr drawable)
return;
if (priv->pbo &&
!(drawable->depth == 24 && pixmap->drawable.depth == 32)) {
!(glamor_drawable_effective_depth(drawable) == 24 && pixmap->drawable.depth == 32)) {
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, priv->pbo);
glUnmapBuffer(GL_PIXEL_UNPACK_BUFFER);
pixmap->devPrivate.ptr = NULL;
......@@ -179,7 +179,7 @@ glamor_finish_access(DrawablePtr drawable)
RegionUninit(&priv->prepare_region);
if (priv->pbo) {
if (drawable->depth == 24 && pixmap->drawable.depth == 32)
if (glamor_drawable_effective_depth(drawable) == 24 && pixmap->drawable.depth == 32)
pixmap->devPrivate.ptr = NULL;
else
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
......
......@@ -513,6 +513,30 @@ glamor_pixmap_hcnt(glamor_pixmap_private *priv)
for (box_index = 0; box_index < glamor_pixmap_hcnt(priv) * \
glamor_pixmap_wcnt(priv); box_index++) \
static inline int
glamor_drawable_effective_depth(DrawablePtr drawable)
{
WindowPtr window;
if (drawable->type != DRAWABLE_WINDOW ||
drawable->depth != 32)
return drawable->depth;
window = (WindowPtr)drawable;
window = window->parent;
while (window && window->parent) {
/* A depth 32 window with any depth 24 ancestors (other than the root
* window) effectively behaves like depth 24
*/
if (window->drawable.depth == 24)
return 24;
window = window->parent;
}
return 32;
}
/* GC private structure. Currently holds only any computed dash pixmap */
typedef struct {
......@@ -871,7 +895,7 @@ glamor_solid(PixmapPtr pixmap, int x, int y, int width, int height,
unsigned long fg_pixel);
void
glamor_solid_boxes(PixmapPtr pixmap,
glamor_solid_boxes(DrawablePtr drawable,
BoxPtr box, int nbox, unsigned long fg_pixel);
......
......@@ -806,7 +806,7 @@ glamor_render_format_is_supported(PicturePtr picture)
return TRUE;
glamor_priv = glamor_get_screen_private(picture->pDrawable->pScreen);
f = &glamor_priv->formats[picture->pDrawable->depth];
f = &glamor_priv->formats[glamor_drawable_effective_depth(picture->pDrawable)];
if (!f->rendering_supported)
return FALSE;
......
......@@ -432,7 +432,6 @@ glamor_image_text(DrawablePtr drawable, GCPtr gc,
int c;
RegionRec region;
BoxRec box;
int off_x, off_y;
/* Check planemask before drawing background to
* bail early if it's not OK
......@@ -443,8 +442,6 @@ glamor_image_text(DrawablePtr drawable, GCPtr gc,
if (charinfo[c])
width += charinfo[c]->metrics.characterWidth;
glamor_get_drawable_deltas(drawable, pixmap, &off_x, &off_y);
if (width >= 0) {
box.x1 = drawable->x + x;
box.x2 = drawable->x + x + width;
......@@ -456,8 +453,8 @@ glamor_image_text(DrawablePtr drawable, GCPtr gc,
box.y2 = drawable->y + y + gc->font->info.fontDescent;
RegionInit(&region, &box, 1);
RegionIntersect(&region, &region, gc->pCompositeClip);
RegionTranslate(&region, off_x, off_y);
glamor_solid_boxes(pixmap, RegionRects(&region), RegionNumRects(&region), gc->bgPixel);
RegionTranslate(&region, -drawable->x, -drawable->y);
glamor_solid_boxes(drawable, RegionRects(&region), RegionNumRects(&region), gc->bgPixel);
RegionUninit(&region);
}
......
......@@ -41,7 +41,7 @@ glamor_upload_boxes(DrawablePtr drawable, BoxPtr in_boxes, int in_nbox,
const struct glamor_format *f = glamor_format_for_pixmap(pixmap);
char *tmp_bits = NULL;
if (drawable->depth == 24 && pixmap->drawable.depth == 32)
if (glamor_drawable_effective_depth(drawable) == 24 && pixmap->drawable.depth == 32)
tmp_bits = xnfalloc(byte_stride * pixmap->drawable.height);
glamor_make_current(glamor_priv);
......
......@@ -44,7 +44,8 @@ glamor_set_color(DrawablePtr drawable,
GLint uniform)
{
glamor_set_color_depth(drawable->pScreen,
drawable->depth, pixel, uniform);
glamor_drawable_effective_depth(drawable),
pixel, uniform);
}
Bool
......
......@@ -23,10 +23,9 @@
#include "glamor_priv.h"
void
glamor_solid_boxes(PixmapPtr pixmap,
glamor_solid_boxes(DrawablePtr drawable,
BoxPtr box, int nbox, unsigned long fg_pixel)
{
DrawablePtr drawable = &pixmap->drawable;
GCPtr gc;
xRectangle *rect;
int n;
......
......@@ -25,6 +25,8 @@
#include <xwayland-config.h>
#include <compositeext.h>
#define MESA_EGL_NO_X11_HEADERS
#define EGL_NO_X11
#include <glamor_egl.h>
......@@ -893,6 +895,108 @@ xwl_glamor_allow_commits(struct xwl_window *xwl_window)
return TRUE;
}
static void
xwl_avoid_implicit_redirect(WindowPtr window)
{
ScreenPtr screen = window->drawable.pScreen;
WindowOptPtr parent_optional;
VisualPtr parent_visual = NULL;
VisualPtr window_visual = NULL;
DepthPtr depth32 = NULL;
int i;
if (!window->optional)
return;
parent_optional = FindWindowWithOptional(window)->optional;
if (window->optional == parent_optional ||
window->optional->visual == parent_optional->visual ||
CompositeIsImplicitRedirectException(screen, parent_optional->visual,
window->optional->visual))
return;
for (i = 0; i < screen->numDepths; i++) {
if (screen->allowedDepths[i].depth == 32) {
depth32 = &screen->allowedDepths[i];
break;
}
}
if (!depth32)
return;
for (i = 0; i < depth32->numVids; i++) {
XID argb_vid = depth32->vids[i];
if (argb_vid != parent_optional->visual)
continue;
if (!compIsAlternateVisual(screen, argb_vid))
break;
for (i = 0; i < screen->numVisuals; i++) {
if (screen->visuals[i].vid == argb_vid) {
parent_visual = &screen->visuals[i];
break;
}
}
}
if (!parent_visual)
return;
for (i = 0; i < screen->numVisuals; i++) {
if (screen->visuals[i].vid == window->optional->visual) {
window_visual = &screen->visuals[i];
break;
}
}
if ((window_visual->class != TrueColor &&
window_visual->class != DirectColor) ||
window_visual->redMask != parent_visual->redMask ||
window_visual->greenMask != parent_visual->greenMask ||
window_visual->blueMask != parent_visual->blueMask ||
window_visual->offsetRed != parent_visual->offsetRed ||
window_visual->offsetGreen != parent_visual->offsetGreen ||
window_visual->offsetBlue != parent_visual->offsetBlue)
return;
CompositeRegisterImplicitRedirectionException(screen, parent_visual->vid, window_visual->vid);
}
static Bool
xwl_glamor_create_window(WindowPtr window)
{
ScreenPtr screen = window->drawable.pScreen;
struct xwl_screen *xwl_screen = xwl_screen_get(screen);
Bool ret;
if (window->parent)
xwl_avoid_implicit_redirect(window);
screen->CreateWindow = xwl_screen->CreateWindow;
ret = (*screen->CreateWindow) (window);
xwl_screen->CreateWindow = screen->CreateWindow;
screen->CreateWindow = xwl_glamor_create_window;
return ret;
}
static void
xwl_glamor_reparent_window(WindowPtr window, WindowPtr old_parent)
{
ScreenPtr screen = window->drawable.pScreen;
struct xwl_screen *xwl_screen = xwl_screen_get(screen);
xwl_avoid_implicit_redirect(window);
screen->ReparentWindow = xwl_screen->ReparentWindow;
(*screen->ReparentWindow) (window, old_parent);
xwl_screen->ReparentWindow = screen->ReparentWindow;
screen->ReparentWindow = xwl_glamor_reparent_window;
}
static Bool
xwl_glamor_create_screen_resources(ScreenPtr screen)
{
......@@ -907,6 +1011,11 @@ xwl_glamor_create_screen_resources(ScreenPtr screen)
if (!ret)
return ret;
xwl_screen->CreateWindow = screen->CreateWindow;
screen->CreateWindow = xwl_glamor_create_window;
xwl_screen->ReparentWindow = screen->ReparentWindow;
screen->ReparentWindow = xwl_glamor_reparent_window;
if (xwl_screen->rootless) {
screen->devPrivate =
fbCreatePixmap(screen, 0, 0, screen->rootDepth, 0);
......
......@@ -70,12 +70,14 @@ struct xwl_screen {
CreateScreenResourcesProcPtr CreateScreenResources;
CloseScreenProcPtr CloseScreen;
CreateWindowProcPtr CreateWindow;
RealizeWindowProcPtr RealizeWindow;
UnrealizeWindowProcPtr UnrealizeWindow;
DestroyWindowProcPtr DestroyWindow;
XYToWindowProcPtr XYToWindow;
SetWindowPixmapProcPtr SetWindowPixmap;
ChangeWindowAttributesProcPtr ChangeWindowAttributes;
ReparentWindowProcPtr ReparentWindow;
ResizeWindowProcPtr ResizeWindow;
MoveWindowProcPtr MoveWindow;
......
......@@ -405,6 +405,9 @@ miPaintWindow(WindowPtr pWin, RegionPtr prgn, int what)
BoxPtr pbox;
xRectangle *prect;
int numRects, regionnumrects;
#ifdef COMPOSITE
WindowPtr orig_pWin = pWin;
#endif
/*
* Distance from screen to destination drawable, use this
......@@ -488,6 +491,27 @@ miPaintWindow(WindowPtr pWin, RegionPtr prgn, int what)
gcval[1].val =
fill.pixel | RootlessAlphaMask(pWin->drawable.bitsPerPixel);
#else
#ifdef COMPOSITE
/* Make sure alpha will sample as 1.0 for opaque windows */
if (drawable->depth == 32) {
int effective_depth = orig_pWin->drawable.depth;
if (effective_depth == 32) {
orig_pWin = orig_pWin->parent;
while (orig_pWin && orig_pWin->parent) {
if (orig_pWin->drawable.depth == 24) {
effective_depth = 24;
break;
}
orig_pWin = orig_pWin->parent;
}
}
if (effective_depth == 24)
fill.pixel |= 0xff000000;
}
#endif
gcval[1].val = fill.pixel;
#endif
gcval[2].val = FillSolid;
......