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
  • wjp/xserver
  • DemiMarie/xserver
  • metux/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
  • huxd1532/xserver
  • keithp/xserver
  • vinilokorlok/xserver
  • bbeckett/xserver
  • dslater38/xserver
  • zzag/xserver
  • emersion/xserver
  • djlucas/xserver
  • ccullumbine2018/xserver
  • daniels/xserver
  • llandwerlin/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
  • xorg/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
  • p12tic/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
  • luyn/xserver
  • cgzones/xserver
  • 1740301466jxz/xserver
  • ids1024/xserver
  • svalaskevicius/xserver
  • ZhiJie.Zhang/xserver
  • chengbo7135/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
  • 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
  • road2react/xserver
  • 1480c1/xserver
  • Spintzyk/xserver
  • MisterDA/xserver
  • starnight/xserver
  • abono/xserver
  • ajax/xserver
  • dougg3/xserver
  • chenx_dust/xserver
  • EXtremeExploit/xserver
  • jwrdegoede/xserver
  • acelan/xserver
  • airlied/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
339 results
Show changes
Commits on Source (7)
  • Jan Beich's avatar
    xwayland: avoid Linux-only headers on non-Linux · f0748b05
    Jan Beich authored and Marge Bot's avatar Marge Bot committed
    hw/xwayland/xwayland-glamor-gbm.c:38:10: fatal error: 'linux/dma-buf.h' file not found
       38 | #include <linux/dma-buf.h>
          |          ^~~~~~~~~~~~~~~~~
    
    Fixes: 3df236a3 ("xwayland: add functions to import and export dma-buf implicit fences")
    Part-of: <xorg/xserver!1481>
    f0748b05
  • Olivier Fourdan's avatar
    Revert "xwayland/glamor: Avoid implicit redirection with depth 32 parent windows" · a65bb848
    Olivier Fourdan authored and Marge Bot's avatar Marge Bot committed
    There are a number of regressions and hard to reproduce issues that find
    their roots in this change, so revert it until those can be ironed out
    some more.
    
    This reverts commit 4bb1f976.
    
    Closes: xorg/xserver#1655
    Closes: xorg/xserver#1656
    
    
    Signed-off-by: default avatarOlivier Fourdan <ofourdan@redhat.com>
    Part-of: <xorg/xserver!1457>
    a65bb848
  • Balló György's avatar
    glamor: Fallback to software rendering on GLSL link failure · 007e98b1
    Balló György authored
    Instead of thowing fatal error on GLSL link failure, fall back to software
    rendering. This allows using Glamor on systems with limited hardware resources
    (such as i915).
    
    Part-of: <!1173>
    007e98b1
  • Michel Dänzer's avatar
    xwayland: Call drmFreeDevice for dma-buf default feedback · 82d3b8ff
    Michel Dänzer authored and Marge Bot's avatar Marge Bot committed
    Fixes leaks:
    
    ==13712== 144 bytes in 1 blocks are definitely lost in loss record 4,827 of 7,462
    ==13712==    at 0x48459F3: calloc (vg_replace_malloc.c:1340)
    ==13712==    by 0x49BE94D: drmDeviceAlloc (xf86drm.c:4072)
    ==13712==    by 0x49BFAC9: drmProcessPciDevice (xf86drm.c:4104)
    ==13712==    by 0x49BFAC9: process_device (xf86drm.c:4508)
    ==13712==    by 0x49C35FB: drmGetDeviceFromDevId (xf86drm.c:4670)
    ==13712==    by 0x1AD370: xwl_dmabuf_feedback_main_device (xwayland-dmabuf.c:477)
    ==13712==    by 0x53C03FD: ffi_call_unix64 (unix64.S:104)
    ==13712==    by 0x53BF70C: ffi_call_int (ffi64.c:673)
    ==13712==    by 0x53BFEE2: ffi_call (ffi64.c:710)
    ==13712==    by 0x49AC920: wl_closure_invoke (connection.c:1025)
    ==13712==    by 0x49A8C08: dispatch_event.isra.0 (wayland-client.c:1631)
    ==13712==    by 0x49AA5AB: dispatch_queue (wayland-client.c:1777)
    ==13712==    by 0x49AA5AB: wl_display_dispatch_queue_pending (wayland-client.c:2019)
    ==13712==    by 0x49AAB5E: wl_display_roundtrip_queue (wayland-client.c:1403)
    
    ==13712== 576 bytes in 4 blocks are definitely lost in loss record 6,289 of 7,462
    ==13712==    at 0x48459F3: calloc (vg_replace_malloc.c:1340)
    ==13712==    by 0x49BE94D: drmDeviceAlloc (xf86drm.c:4072)
    ==13712==    by 0x49BFAC9: drmProcessPciDevice (xf86drm.c:4104)
    ==13712==    by 0x49BFAC9: process_device (xf86drm.c:4508)
    ==13712==    by 0x49C35FB: drmGetDeviceFromDevId (xf86drm.c:4670)
    ==13712==    by 0x1AD583: xwl_dmabuf_feedback_main_device (xwayland-dmabuf.c:477)
    ==13712==    by 0x1AD583: xwl_window_dmabuf_feedback_main_device (xwayland-dmabuf.c:691)
    ==13712==    by 0x53C03FD: ffi_call_unix64 (unix64.S:104)
    ==13712==    by 0x53BF70C: ffi_call_int (ffi64.c:673)
    ==13712==    by 0x53BFEE2: ffi_call (ffi64.c:710)
    ==13712==    by 0x49AC920: wl_closure_invoke (connection.c:1025)
    ==13712==    by 0x49A8C08: dispatch_event.isra.0 (wayland-client.c:1631)
    ==13712==    by 0x49AA5AB: dispatch_queue (wayland-client.c:1777)
    ==13712==    by 0x49AA5AB: wl_display_dispatch_queue_pending (wayland-client.c:2019)
    ==13712==    by 0x1A1842: xwl_read_events (xwayland-screen.c:566)
    ==13712==    by 0x1A1842: xwl_read_events (xwayland-screen.c:553)
    
    Fixes: 6f0b9dee ("xwayland: use drmDevice to compare DRM devices")
    Part-of: <xorg/xserver!1484>
    82d3b8ff
  • Michel Dänzer's avatar
    xwayland: Use drmDevicesEqual in xwl_dmabuf_feedback_tranche_done · 4dc7e998
    Michel Dänzer authored and Marge Bot's avatar Marge Bot committed
    xwl_dmabuf_feedback_tranche_target_device always allocates a new
    drmDevice for xwl_feedback->tmp_tranche.drm_dev, so the pointers are
    never equal here.
    
    Fixes: 6f0b9dee ("xwayland: use drmDevice to compare DRM devices")
    
    v2:
    * Flip order of checks, so drmDevicesEqual is called only if the
      supports_scanout flags match.
    
    Part-of: <xorg/xserver!1484>
    4dc7e998
  • Michel Dänzer's avatar
    dri3: Free formats in cache_formats_and_modifiers · 3b6b88c1
    Michel Dänzer authored and Marge Bot's avatar Marge Bot committed
    Fixes leak:
    
    ==15672== 60 bytes in 1 blocks are definitely lost in loss record 3,803 of 8,127
    ==15672==    at 0x4840718: malloc (vg_replace_malloc.c:392)
    ==15672==    by 0x2F2698: XNFreallocarray (alloc.c:55)
    ==15672==    by 0x1ADAA9: xwl_dmabuf_get_formats_for_device (xwayland-dmabuf.c:207)
    ==15672==    by 0x1ADAA9: xwl_glamor_get_formats (xwayland-dmabuf.c:248)
    ==15672==    by 0x303D86: cache_formats_and_modifiers (dri3_screen.c:176)
    ==15672==    by 0x303D86: dri3_get_supported_modifiers (dri3_screen.c:229)
    ==15672==    by 0x30331A: proc_dri3_get_supported_modifiers (dri3_request.c:389)
    ==15672==    by 0x217B6B: Dispatch (dispatch.c:550)
    ==15672==    by 0x21B9A0: dix_main (main.c:276)
    ==15672==    by 0x51086C9: (below main) (libc_start_call_main.h:58)
    
    Fixes: a42992a4 ("dri3: rework format/modifier caching")
    Part-of: <xorg/xserver!1484>
    3b6b88c1
  • Olivier Fourdan's avatar
    xwayland: Walk the regions' boxes · 385226bd
    Olivier Fourdan authored and Marge Bot's avatar Marge Bot committed
    
    In xwl_source_validate(), the actual box wasn't updated, so we would
    possibly copy several times the same first box.
    
    Signed-off-by: default avatarOlivier Fourdan <ofourdan@redhat.com>
    Reviewed-by: default avatarMichel Dänzer <mdaenzer@redhat.com>
    Fixes: aa05f38f - xwayland: Add SourceValidate hook
    Part-of: <xorg/xserver!1485>
    385226bd
......@@ -183,8 +183,10 @@ cache_formats_and_modifiers(ScreenPtr screen)
}
ds->formats = calloc(num_formats, sizeof(dri3_dmabuf_format_rec));
if (!ds->formats)
if (!ds->formats) {
free(formats);
return BadAlloc;
}
for (i = 0; i < num_formats; i++) {
dri3_dmabuf_format_ptr iter = &ds->formats[i];
......@@ -205,6 +207,7 @@ cache_formats_and_modifiers(ScreenPtr screen)
ds->num_formats = i;
ds->formats_cached = TRUE;
free(formats);
return Success;
}
......
......@@ -369,35 +369,6 @@ fallback:
}
static Bool
glamor_check_instruction_count(int gl_version)
{
GLint max_native_alu_instructions;
/* Avoid using glamor if the reported instructions limit is too low,
* as this would cause glamor to fallback on sw due to large shaders
* which ends up being unbearably slow.
*/
if (gl_version < 30) {
if (!epoxy_has_gl_extension("GL_ARB_fragment_program")) {
ErrorF("GL_ARB_fragment_program required\n");
return FALSE;
}
glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB,
GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB,
&max_native_alu_instructions);
if (max_native_alu_instructions < GLAMOR_MIN_ALU_INSTRUCTIONS) {
LogMessage(X_WARNING,
"glamor requires at least %d instructions (%d reported)\n",
GLAMOR_MIN_ALU_INSTRUCTIONS, max_native_alu_instructions);
return FALSE;
}
}
return TRUE;
}
static void GLAPIENTRY
glamor_debug_output_callback(GLenum source,
GLenum type,
......@@ -728,9 +699,6 @@ glamor_init(ScreenPtr screen, unsigned int flags)
goto fail;
}
if (!glamor_check_instruction_count(gl_version))
goto fail;
/* Glamor rendering assumes that platforms with GLSL 130+
* have instanced arrays, but this is not always the case.
* etnaviv offers GLSL 140 with OpenGL 2.1.
......@@ -891,7 +859,16 @@ glamor_init(ScreenPtr screen, unsigned int flags)
ps->Glyphs = glamor_composite_glyphs;
glamor_init_vbo(screen);
glamor_init_gradient_shader(screen);
glamor_priv->enable_gradient_shader = TRUE;
if (!glamor_init_gradient_shader(screen)) {
LogMessage(X_WARNING,
"glamor%d: Cannot initialize gradient shader, falling back to software rendering for gradients\n",
screen->myNum);
glamor_priv->enable_gradient_shader = FALSE;
}
glamor_pixmap_init(screen);
glamor_sync_init(screen);
......
......@@ -78,7 +78,7 @@ glamor_compile_glsl_prog(GLenum type, const char *source)
return prog;
}
void
Bool
glamor_link_glsl_prog(ScreenPtr screen, GLint prog, const char *format, ...)
{
GLint ok;
......@@ -106,8 +106,9 @@ glamor_link_glsl_prog(ScreenPtr screen, GLint prog, const char *format, ...)
glGetProgramInfoLog(prog, size, NULL, info);
ErrorF("Failed to link: %s\n", info);
FatalError("GLSL link failure\n");
return FALSE;
}
return TRUE;
}
......
......@@ -177,7 +177,7 @@ _glamor_create_getcolor_fs_source(ScreenPtr screen, int stops_count,
}
}
static void
static Bool
_glamor_create_radial_gradient_program(ScreenPtr screen, int stops_count,
int dyn_gen)
{
......@@ -316,7 +316,7 @@ _glamor_create_radial_gradient_program(ScreenPtr screen, int stops_count,
if ((glamor_priv->radial_max_nstops >= stops_count) && (dyn_gen)) {
/* Very Good, not to generate again. */
return;
return TRUE;
}
glamor_make_current(glamor_priv);
......@@ -353,7 +353,10 @@ _glamor_create_radial_gradient_program(ScreenPtr screen, int stops_count,
glBindAttribLocation(gradient_prog, GLAMOR_VERTEX_POS, "v_position");
glBindAttribLocation(gradient_prog, GLAMOR_VERTEX_SOURCE, "v_texcoord");
glamor_link_glsl_prog(screen, gradient_prog, "radial gradient");
if (!glamor_link_glsl_prog(screen, gradient_prog, "radial gradient")) {
glDeleteProgram(gradient_prog);
return FALSE;
}
if (dyn_gen) {
index = 2;
......@@ -367,9 +370,11 @@ _glamor_create_radial_gradient_program(ScreenPtr screen, int stops_count,
}
glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][index] = gradient_prog;
return TRUE;
}
static void
static Bool
_glamor_create_linear_gradient_program(ScreenPtr screen, int stops_count,
int dyn_gen)
{
......@@ -500,7 +505,7 @@ _glamor_create_linear_gradient_program(ScreenPtr screen, int stops_count,
if ((glamor_priv->linear_max_nstops >= stops_count) && (dyn_gen)) {
/* Very Good, not to generate again. */
return;
return TRUE;
}
glamor_make_current(glamor_priv);
......@@ -533,7 +538,10 @@ _glamor_create_linear_gradient_program(ScreenPtr screen, int stops_count,
glBindAttribLocation(gradient_prog, GLAMOR_VERTEX_POS, "v_position");
glBindAttribLocation(gradient_prog, GLAMOR_VERTEX_SOURCE, "v_texcoord");
glamor_link_glsl_prog(screen, gradient_prog, "linear gradient");
if (!glamor_link_glsl_prog(screen, gradient_prog, "linear gradient")) {
glDeleteProgram(gradient_prog);
return FALSE;
}
if (dyn_gen) {
index = 2;
......@@ -547,9 +555,11 @@ _glamor_create_linear_gradient_program(ScreenPtr screen, int stops_count,
}
glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][index] = gradient_prog;
return TRUE;
}
void
Bool
glamor_init_gradient_shader(ScreenPtr screen)
{
glamor_screen_private *glamor_priv;
......@@ -564,11 +574,15 @@ glamor_init_gradient_shader(ScreenPtr screen)
glamor_priv->linear_max_nstops = 0;
glamor_priv->radial_max_nstops = 0;
_glamor_create_linear_gradient_program(screen, 0, 0);
_glamor_create_linear_gradient_program(screen, LINEAR_LARGE_STOPS, 0);
if (!_glamor_create_linear_gradient_program(screen, 0, 0) ||
!_glamor_create_linear_gradient_program(screen, LINEAR_LARGE_STOPS, 0))
return FALSE;
if (!_glamor_create_radial_gradient_program(screen, 0, 0) ||
!_glamor_create_radial_gradient_program(screen, RADIAL_LARGE_STOPS, 0))
return FALSE;
_glamor_create_radial_gradient_program(screen, 0, 0);
_glamor_create_radial_gradient_program(screen, RADIAL_LARGE_STOPS, 0);
return TRUE;
}
static void
......
......@@ -247,6 +247,7 @@ typedef struct glamor_screen_private {
Bool can_copyplane;
Bool use_gpu_shader4;
int max_fbo_size;
Bool enable_gradient_shader;
/**
* Stores information about supported formats. Note, that this list contains all
......@@ -654,7 +655,7 @@ Bool glamor_get_drawable_location(const DrawablePtr drawable);
void glamor_get_drawable_deltas(DrawablePtr drawable, PixmapPtr pixmap,
int *x, int *y);
GLint glamor_compile_glsl_prog(GLenum type, const char *source);
void glamor_link_glsl_prog(ScreenPtr screen, GLint prog,
Bool glamor_link_glsl_prog(ScreenPtr screen, GLint prog,
const char *format, ...) _X_ATTRIBUTE_PRINTF(3,4);
void glamor_get_color_4f_from_pixel(PixmapPtr pixmap,
unsigned long fg_pixel, GLfloat *color);
......@@ -710,7 +711,7 @@ void glamor_trapezoids(CARD8 op,
int ntrap, xTrapezoid *traps);
/* glamor_gradient.c */
void glamor_init_gradient_shader(ScreenPtr screen);
Bool glamor_init_gradient_shader(ScreenPtr screen);
PicturePtr glamor_generate_linear_gradient_picture(ScreenPtr screen,
PicturePtr src_picture,
int x_source, int y_source,
......@@ -987,6 +988,4 @@ void glamor_xv_render(glamor_port_private *port_priv, int id);
#include "glamor_font.h"
#define GLAMOR_MIN_ALU_INSTRUCTIONS 128 /* Minimum required number of native ALU instructions */
#endif /* GLAMOR_PRIV_H */
......@@ -378,7 +378,8 @@ glamor_build_program(ScreenPtr screen,
glBindFragDataLocationIndexed(prog->prog, 0, 1, "color1");
}
glamor_link_glsl_prog(screen, prog->prog, "%s_%s", prim->name, fill->name);
if (!glamor_link_glsl_prog(screen, prog->prog, "%s_%s", prim->name, fill->name))
goto fail;
prog->matrix_uniform = glamor_get_uniform(prog, glamor_program_location_none, "v_matrix");
prog->fg_uniform = glamor_get_uniform(prog, glamor_program_location_fg, "fg");
......
......@@ -61,7 +61,7 @@ static struct blendinfo composite_op_info[] = {
#define RepeatFix 10
static GLuint
glamor_create_composite_fs(glamor_screen_private *glamor_priv, struct shader_key *key)
glamor_create_composite_fs(glamor_screen_private *glamor_priv, struct shader_key *key, Bool enable_rel_sampler)
{
const char *repeat_define =
"#define RepeatNone 0\n"
......@@ -131,6 +131,15 @@ glamor_create_composite_fs(glamor_screen_private *glamor_priv, struct shader_key
" }\n"
" return vec4(texture(tex_image, tex).rgb, 1.0);\n"
"}\n";
const char *stub_rel_sampler =
" vec4 rel_sampler_rgba(sampler2D tex_image, vec2 tex, vec4 wh, int repeat)\n"
"{\n"
" return texture(tex_image, tex);\n"
"}\n"
" vec4 rel_sampler_rgbx(sampler2D tex_image, vec2 tex, vec4 wh, int repeat)\n"
"{\n"
" return vec4(texture(tex_image, tex).rgb, 1.0);\n"
"}\n";
const char *source_solid_fetch =
"uniform vec4 source;\n"
......@@ -327,7 +336,8 @@ glamor_create_composite_fs(glamor_screen_private *glamor_priv, struct shader_key
GLAMOR_DEFAULT_PRECISION
"%s%s%s%s%s%s%s%s", header, GLAMOR_COMPAT_DEFINES_FS,
repeat_define, relocate_texture,
rel_sampler, source_fetch, mask_fetch, dest_swizzle, in);
enable_rel_sampler ? rel_sampler : stub_rel_sampler,
source_fetch, mask_fetch, dest_swizzle, in);
prog = glamor_compile_glsl_prog(GL_FRAGMENT_SHADER, source);
free(source);
......@@ -391,18 +401,21 @@ glamor_create_composite_shader(ScreenPtr screen, struct shader_key *key,
GLuint vs, fs, prog;
GLint source_sampler_uniform_location, mask_sampler_uniform_location;
glamor_screen_private *glamor_priv = glamor_get_screen_private(screen);
Bool enable_rel_sampler = TRUE;
glamor_make_current(glamor_priv);
vs = glamor_create_composite_vs(glamor_priv, key);
if (vs == 0)
return;
fs = glamor_create_composite_fs(glamor_priv, key);
fs = glamor_create_composite_fs(glamor_priv, key, enable_rel_sampler);
if (fs == 0)
return;
prog = glCreateProgram();
glAttachShader(prog, vs);
glAttachShader(prog, fs);
glDeleteShader(vs);
glDeleteShader(fs);
glBindAttribLocation(prog, GLAMOR_VERTEX_POS, "v_position");
glBindAttribLocation(prog, GLAMOR_VERTEX_SOURCE, "v_texcoord0");
......@@ -412,7 +425,22 @@ glamor_create_composite_shader(ScreenPtr screen, struct shader_key *key,
glBindFragDataLocationIndexed(prog, 0, 0, "color0");
glBindFragDataLocationIndexed(prog, 0, 1, "color1");
}
glamor_link_glsl_prog(screen, prog, "composite");
if (!glamor_link_glsl_prog(screen, prog, "composite")) {
/* Failed to link the shader, try again without rel_sampler. */
enable_rel_sampler = FALSE;
glDetachShader(prog, fs);
fs = glamor_create_composite_fs(glamor_priv, key, enable_rel_sampler);
if (fs == 0)
return;
glAttachShader(prog, fs);
glDeleteShader(fs);
if (!glamor_link_glsl_prog(screen, prog, "composite")) {
glDeleteProgram(prog);
return;
}
}
shader->prog = prog;
......@@ -1407,6 +1435,7 @@ glamor_convert_gradient_picture(ScreenPtr screen,
int error;
PictFormatPtr pFormat;
PictFormatShort format;
glamor_screen_private *glamor_priv = glamor_get_screen_private(screen);
if (source->pDrawable) {
pFormat = source->pFormat;
......@@ -1416,7 +1445,7 @@ glamor_convert_gradient_picture(ScreenPtr screen,
pFormat = PictureMatchFormat(screen, 32, format);
}
if (!source->pDrawable) {
if (glamor_priv->enable_gradient_shader && !source->pDrawable) {
if (source->pSourcePict->type == SourcePictTypeLinear) {
dst = glamor_generate_linear_gradient_picture(screen,
source, x_source,
......
......@@ -74,6 +74,7 @@ xwl_dmabuf_feedback_destroy(struct xwl_dmabuf_feedback *xwl_feedback)
zwp_linux_dmabuf_feedback_v1_destroy(xwl_feedback->dmabuf_feedback);
xwl_feedback->dmabuf_feedback = NULL;
drmFreeDevice(&xwl_feedback->main_dev);
}
static Bool
......@@ -474,6 +475,8 @@ xwl_dmabuf_feedback_main_device(void *data,
assert(dev->size == sizeof(dev_t));
memcpy(&devid, dev->data, sizeof(dev_t));
drmFreeDevice(&xwl_feedback->main_dev);
if (drmGetDeviceFromDevId(devid, 0, &xwl_feedback->main_dev) != 0)
ErrorF("linux_dmabuf_feedback.main_device: Failed to fetch DRM device\n");
}
......@@ -577,8 +580,8 @@ xwl_dmabuf_feedback_tranche_done(void *data,
*/
for (int i = 0; i < xwl_feedback->dev_formats_len; i++) {
tranche = &xwl_feedback->dev_formats[i];
if (tranche->drm_dev == xwl_feedback->tmp_tranche.drm_dev &&
tranche->supports_scanout == xwl_feedback->tmp_tranche.supports_scanout) {
if (tranche->supports_scanout == xwl_feedback->tmp_tranche.supports_scanout &&
drmDevicesEqual(tranche->drm_dev, xwl_feedback->tmp_tranche.drm_dev)) {
appended = TRUE;
/* Add all format/mods to this tranche */
......
......@@ -35,9 +35,11 @@
#include <sys/stat.h>
#include <xf86drm.h>
#include <drm_fourcc.h>
#if defined(__linux__)
#include <linux/dma-buf.h>
#include <linux/sync_file.h>
#include <sys/ioctl.h>
#endif
#define MESA_EGL_NO_X11_HEADERS
#define EGL_NO_X11
......
......@@ -25,9 +25,6 @@
#include <xwayland-config.h>
#include <compositeext.h>
#include "compositeext_priv.h"
#define MESA_EGL_NO_X11_HEADERS
#define EGL_NO_X11
#include <glamor_egl.h>
......@@ -133,108 +130,6 @@ xwl_glamor_has_wl_interfaces(struct xwl_screen *xwl_screen)
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)
{
......@@ -249,11 +144,6 @@ 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);
......
......@@ -72,14 +72,12 @@ struct xwl_screen {
CreateScreenResourcesProcPtr CreateScreenResources;
CloseScreenProcPtr CloseScreen;
ConfigNotifyProcPtr ConfigNotify;
CreateWindowProcPtr CreateWindow;
RealizeWindowProcPtr RealizeWindow;
UnrealizeWindowProcPtr UnrealizeWindow;
DestroyWindowProcPtr DestroyWindow;
XYToWindowProcPtr XYToWindow;
SetWindowPixmapProcPtr SetWindowPixmap;
ChangeWindowAttributesProcPtr ChangeWindowAttributes;
ReparentWindowProcPtr ReparentWindow;
MoveWindowProcPtr MoveWindow;
SourceValidateProcPtr SourceValidate;
......
......@@ -270,6 +270,7 @@ xwl_source_validate(DrawablePtr drawable, int x, int y, int width, int height,
pbox->x1, pbox->y1,
pbox->x2 - pbox->x1, pbox->y2 - pbox->y1,
pbox->x1, pbox->y1);
pbox++;
}
FreeScratchGC(pGC);
}
......