glamor: Changes to 'upstream-unstable'
New branch 'upstream-unstable' available with the following commits:
commit 81aadb8ae204f58d77a948c8624f1e72659dcdf0
Author: Armin K <krejzi@email.com>
Date: Wed Mar 13 18:49:33 2013 +0100
Don't use AC_PROG_LIBTOOL
Autoconf only needs libtool macros which are copied when
autoreconf is run. There is no need for looking for
"libtool" program in PATH. This properly disables static
libraries from being built and installed.
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
commit f2d7f1cf351bdc3a8a00fe564cd6a937db3b4e19
Author: Armin K <krejzi@email.com>
Date: Wed Mar 13 18:49:32 2013 +0100
First attempt to make libglamor.so shared versioned library
As recommended by Michel in this thread reply:
http://lists.freedesktop.org/archives/glamor/2013-March/000305.html
v2: Correct shared library location in glamor.pc.in
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=62259
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
commit c7241f097ddb4d3bfb832f6b4ee6fafe8b4d2cfe
Author: Armin K <krejzi@email.com>
Date: Wed Mar 13 18:28:58 2013 +0100
Properly dist necesary headers
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
commit 3cd34ba9f0708ab7d816eeee80139257fafcb4ad
Author: Armin K <krejzi@email.com>
Date: Wed Mar 13 18:28:57 2013 +0100
Silence Automake 1.13 warnings
warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
commit 61879504f86c5cb326cc06a5873283234cfbbcd2
Author: Michel Dänzer <michel.daenzer@amd.com>
Date: Wed Mar 13 17:15:33 2013 +0100
glamoregl: Use xf86ScreenToScrn()
Fixes crashes when glamor is used for a GPU screen with xserver 1.13 or
newer.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=57200#c17
Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
commit c0729336ae35dcc7e46bcf840d6e9a056d5cdd26
Author: Dave Airlie <airlied@redhat.com>
Date: Sat Dec 29 06:42:30 2012 +0000
glamor_utils: fix unlikely define use
using a define across a split line expression is failure, compiling
with warnings shows this up.
Signed-off-by: Dave Airlie <airlied@redhat.com>
commit c6d9cb1eb4962a15f8bbc869e9fef6d1464165af
Author: Dave Airlie <airlied@redhat.com>
Date: Sat Dec 29 06:42:10 2012 +0000
glamor: add compiler.h
This is also required for distchecking.
Signed-off-by: Dave Airlie <airlied@redhat.com>
commit 4a0ac3ff00d70b13e8483d50657187c7abdfc110
Author: Dave Airlie <airlied@redhat.com>
Date: Sat Dec 29 06:28:17 2012 +0000
glamor: fix make distcheck part 1
This just adds the headers, then it falls over on the sdk_HEADERS
as it overrides proper install paths by the looks of it.
Signed-off-by: Dave Airlie <airlied@redhat.com>
commit f1457c1c59efdadbad25f01dce9433643d688844
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Tue Nov 13 10:08:02 2012 +0800
glamor_compositerects: Need to initialize region before fallback.
As we need to call DamageRegionAppend even for fallback path,
we must initialize the region before do that. Pointed by
Igor Vagulin.
https://bugs.freedesktop.org/show_bug.cgi?id=56940
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit beeddaae1da253d1a442228a75f80ef40a0204ac
Author: Michel Dänzer <michel.daenzer@amd.com>
Date: Wed Oct 31 16:56:00 2012 +0100
Don't use glBlitFramebufferEXT for overlapping copies.
According to the GL_EXT_framebuffer_blit spec, the result of doing so is
undefined. But we need well-defined results. :)
Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
commit 9b8a791290af0add84269efdb315f9f58798f6d2
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Fri Aug 10 13:46:42 2012 +0800
Bump to version 0.5.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit 047c1375d6d08ac53839d0149dbbc03258f28d6a
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Wed Aug 8 20:43:38 2012 +0800
Increase vbo size to 64K verts.
This commit will benefit vertex stressing cases such as
aa10text/rgb10text, and can get about 15% performance gain.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
Acked-by: Junyan <junyan.he@linux.intel.com>
commit 43cabf3f7c84e00d8480136d2ed5108d84ca392b
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Wed Aug 8 20:11:43 2012 +0800
Silence compilation warnings.
After increase to gcc4.7, it reports more warnings, now
fix them.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
Tested-by: Junyan He<junyan.he@linux.intel.com>
commit a991ea45a60b0566adf9e6c15809fd4f49af7129
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Wed Aug 8 20:08:12 2012 +0800
glamor_largepixmap: Fixed a bug in repeat clipping.
If the repeat direction only has one block, then we need to set the
dx/dy to cover all the extent. This commit also silence some compilation
warnings.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit aa2b71332143fe7d62b3c3f16462f8335e3a7844
Author: Michel Dänzer <michel.daenzer@amd.com>
Date: Tue Aug 7 18:16:58 2012 +0200
Prefer KHR_surfaceless_context EGL extension over KHR_surfaceless_opengl/gles2.
Current Mesa Git only advertises the former instead of the latter.
Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit 67fb454c47903d4dc9b439f2c5af73a331cbc3cb
Author: Michel Dänzer <michel.daenzer@amd.com>
Date: Tue Aug 7 18:13:32 2012 +0200
Print space between name of missing EGL extension and 'required'.
Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit 801192caf1444d50d905de9c6133abe7de869894
Author: Junyan He <junyan.he@linux.intel.com>
Date: Tue Aug 7 05:01:59 2012 +0800
Fallback to pixman when trapezoid mask is big.
The trapezoid generating speed of the shader is relatively
slower when the trapezoid area is big. We fallback when
the trapezoid's width and height is bigger enough.
The big traps number will also slow down the render because
of the VBO size. We fallback if ntrap > 256
Signed-off-by: Junyan He <junyan.he@linux.intel.com>
Reviewed-By: Zhigang Gong <zhigang.gong@linux.intel.com>
commit ded419455c67846d75944c75d623d6e1c510db9f
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Thu Aug 2 18:07:07 2012 +0800
glamor_glyphs: When dst arg point to a NULL buffer, dont't flush.
This is a corner case, when we render glyphs via mask cache, and
when we need to upload new glyphs cache, we need to flush both the
mask and dest buffer. But we the dest arg may point to a NULL buffer
at that time, we need to check it firstly. If the dest buffer is NULL.
Then we don't need to flush both the dest and mask buffer.
This commit fix a potential crash.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit f233aeef15ca357c9a0a770687d13b6560871420
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Wed Aug 1 18:27:29 2012 +0800
glamor_trapezoid: workaround a glsl like problem.
It seems that the following statement cann't run as expected on SNB.
bool trap_left_vertical = (abs(trap_left_vertical_f - 1.0) <= 0.0001);
Have to rewrite it to another style to let the vertical edge trapezoid
to be rendered correctly.
Reviewed-by: Junyan He <junyan.he@linux.intel.com>
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit 79d369f161c78185483bf8fdeed77f79430d4a1e
Author: Junyan He <junyan.he@linux.intel.com>
Date: Fri Jul 20 05:52:57 2012 +0800
Fix the problem of VBO leak.
In some cases we allocate the VBO but have no vertex to
emit, which cause the VBO fail to be released. Fix it.
Signed-off-by: Junyan He <junyan.he@linux.intel.com>
commit 1f50d3f368c9e7135576ecb376fbaef34fd22132
Author: Junyan He <junyan.he@linux.intel.com>
Date: Fri Jul 20 05:52:50 2012 +0800
Just use the shader to generate trapezoid if PolyMode == Imprecise
The precise mode of trapezoid rendering need to sample the trapezoid on
the centre points of an (2*n+1)x(2*n-1) subpixel grid. It is computationally
expensive in shader, and we use inside area ratio to replace it.
The result has some difference, and we just use it if the polymode == Imprecise.
Signed-off-by: Junyan He <junyan.he@linux.intel.com>
commit 1315ff92e2e19811cfb9a8bddab8e40bca5cd4e5
Author: Junyan He <junyan.he@linux.intel.com>
Date: Fri Jul 20 05:52:43 2012 +0800
Change the trapezoid render to use VBO.
Because some uniform variables need to be set for every
trapezoid rendering, we can not use vbo to render multi
trapezoids one time, which have performance big loss.
We now add attributes which contain the same value to bypass
the uniform variable problem. The uniform value for one
trapezoid will be set to the same value to all the vertex
of that trapezoid as an attribute, then in FS, it is still
a constant.
Signed-off-by: Junyan He <junyan.he@linux.intel.com>
commit ab212d3b90cd288da46af43390feacb489db77b1
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Mon Jul 16 17:27:22 2012 +0800
Added the missed header file for xorg 1.13 compat.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit 726ad264f485ce1d39aa387e93ac224fb46ed059
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Mon Jul 16 11:25:09 2012 +0800
Synch with xorg 1.13 change.
As xorg 1.13 change the scrn interaces and remove those
global arrays. Some API change cause we can't build. Now
fix it.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit e51e16e64b1b87a6eb96c5993183475ad8a88cfd
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Fri Jul 13 09:20:02 2012 +0800
gles2: Fixed the compilation problem and some bugs.
Previous patch doesn't set the offset to zero for GLESv2
path. Now fix it.
This patch also fix a minor problem in pixmap uploading
preparation. If the revert is not REVERT_NORMAL, then we
don't need to prepare a fbo for it. As current mesa i965
gles2 driver doesn't support to set a A8 texture as a fbo
target, we must fix this problem. As some A1/A8 picture
need to be uploaded, this is the only place a A8 texture
may be attached to a fbo.
This patch also enable the shader gradient for GLESv2.
The reason we disable it before is that some glsl linker
doesn't support link different objects which have cross
reference. Now we don't have that problem.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit 5247854b57c3d931b5ad593a8c12b6978e6865d0
Author: Michel Dänzer <michel.daenzer@amd.com>
Date: Thu Jul 12 18:57:06 2012 +0800
Stream vertex data to VBOs.
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit 12c5d248a3efe5afb06f0dc246b207cc497e9420
Author: Michel D=C3=A4nzer <michel.daenzer@amd.com>
Date: Wed Jul 11 15:01:15 2012 +0800
Fix translation of clip region for composite fallback.
Fixes incorrectly clipped rendering. E.g. the cursor in Evolution
composer windows became invisible.
Signed-off-by: Michel Daenzer <michel.daenzer@amd.com>
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit 1aeca388c9ff9d8cbdfbdd552abe764d36c73f40
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Wed Jul 4 17:59:25 2012 +0800
glamor_glyphs: Don't merge extents for different lists.
If we merge all lists's extent together, than we may have
some fail overlap checking. Here is a simple:
A E
B F
C
D
The first list has vertical "ABCD". And the second list
has two char "EF". When detecting E, it can successfully
find it doesn't overlap with previous glyphs. But after
that, the original code will merge the previous extent with
E's extent, then the extent will cover "F", so when detecting
F, it will be treated as overlapped.
We can simply solve this issue by not merge extent from different
list. We can union different list's extent to a global region.
And then do the intersect checkint between that region and
current glyph extent, then we can avoid that fail checking.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit 73d33dd2400772ad47a57dad2c2fa93caebccc80
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Tue Jul 3 18:24:07 2012 +0800
glamor_copyarea: Use blitcopy if current state is not render.
Practically, for pure 2D blit, the blit copy is much faster
than textured copy. For the x11perf copywinwin100, it's about
3x faster. But if we have heavy rendering/compositing, then use
textured copy will get much better (>30%)performance for most
of the cases.
So we simply add a data element to track current state. For
rendering state we use textured copy, otherwise, we use blit
copy.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit 1ec81c73bf4660d87b9cfa281647ca6cbda68f2e
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Tue Jul 3 18:11:12 2012 +0800
glamor_glyphs: Use cache picture to store mask picture if possible.
By default, mask picture is newly created, and each time we need to
clear the whole mask picture, and then composite glyphs to the mask
picture and then composite the mask picture to destination.
Testing results shows that the filling of the mask picture takes a
big portion of the rendering time. As we don't really need to clear
the whole region, we just need to clear the real overlapped region.
This commit is to solve this issue. We split a large glyphs list to
serval lists and each list is non-overlapped or overlapped.
we can reduce the length of overlapped glyphs to do the glyphs_via_mask
to 2 or 3 glyphs one time for most cases. Thus it give us a case to allocate a
small portion of the corresponding cache directly as the mask picture.
Then we can rendering the glyphs to this mask picture, and latter we
can accumulate the second steps, composite the mask to the dest with
the other non-overlapped glyphs's rendering process.
It also make us implement a batch mask cache blocks clearing
algorithm to avoid too frequently small region clearing.
If there is no any overlapping, this method will not get performance gain.
If there is some overlapping, then this algorithm can get about 15% performance
gain.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit 4c368b12c1af317c79469f8b6b809997d1769080
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Wed Jun 27 12:53:40 2012 +0800
glamor_compositerects: Implement optimized version.
Don't call miCompositeRects. Use glamor_composite_clipped_region
to render those boxes at once.
Also add a new function glamor_solid_boxes to fill boxes at once.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit ecc70624ca77478a46e9fb9487d76c74c6be1d8f
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Tue Jun 26 20:00:21 2012 +0800
optimize: Use likely and unlikely.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit 622bfc174ab0c8a04146bd5fb754e96bc51d38c0
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Tue Jun 26 19:56:27 2012 +0800
create_pixmap: use texture for large glyphs.
As we only cache glyphs smaller than 64x64, we need to use
texutre for the large glyphs.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit 033349420f53cdbbdda37b3975c498a0dc885cf6
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Tue Jun 26 17:19:16 2012 +0800
glamor_copyarea: Fixed a bug introduced by 996194...
Default return value should be FALSE.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit f3cff9975b1969b91b85f329be9fa925a9137f34
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Tue Jun 26 16:24:32 2012 +0800
glamor_glyphs: Slightly performance tuning.
As glamor_glyphs never fallback, we don't need to keep the
underlying glyphs routines, just override the ps->glys
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit 593bd206bf2794dc1450e8e7d20142b8d0ca074b
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Tue Jun 26 15:39:24 2012 +0800
glamor_render: Don't allocate buffer for vbo each time.
We can reuse the last one if the last one is big enough
to contain current vertext data. In the meantime, Use
MapBufferRange instead of MapBuffer.
Testing shows, this patch brings some benefit for
aa10text/rgb10text. Not too much, but indeed faster.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit e44ce79d719ece8997c777329834c5293fc668b8
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Tue Jun 26 13:09:05 2012 +0800
glamor_largepixmap: Walkaround for large texture's upload.
I met a problem with large texture (larger than 7000x7000)'s
uploading on SNB platform. The map_gtt get back a mapped VA
without error, but write to that virtual address triggers
BUS error. This work around is to avoid that direct uploading.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit fc3674fbf40cbe5ddb3e3a29ce86be7db743892b
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Mon Jun 25 23:24:37 2012 +0800
glamor_render: Optimize the two pass ca rendering.
For the componentAlpha with PictOpOver, we use two pass
rendering to implement it. Previous implementation call
two times the glamor_composite_... independently which is
very inefficient. Now we change the control flow, and do
the two pass internally and avoid duplicate works.
For the x11perf -rgb10text, this optimization can get about
30% improvement.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit 63fb516af37d07f11b4e8d52338354de98885425
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Mon Jun 25 16:37:22 2012 +0800
glamor_composite_glyph: Optimize glyphs with non-solid pattern.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit 07177a4842851a5ee611bdff6693bdd81c9828c1
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Thu Jun 21 19:30:51 2012 +0800
glamor_glyphs: Detect fake or real glyphs overlap.
To split a glyph's extent region to three sub-boxes
as below.
left box 2 x h
center box (w-4) x h
right box 2 x h
Take a simple glyph A as an example:
*
__* *__
*****
* *
~~ ~~
The left box and right boxes are both 2 x 2. The center box
is 2 x 4.
The left box has two bitmaps 0001'b and 0010'b to indicate
the real inked area.
The right box also has two bitmaps 0010'b and 0001'b.
And then we can check the inked area in left and right boxes with
previous glyph. If the direction is from left to right, then we
need to check the previous right bitmap with current left bitmap.
And if we found the center box has overlapped or we overlap with
not only the previous glyph, we will treat it as real overlapped
and will render the glyphs via mask.
If we only intersect with previous glyph on the left/right edge.
Then we further compute the real overlapped bits. We set a loose
check criteria here, if it has less than two pixel overlapping, we
treat it as non-overlapping.
With this patch, The aa10text boost fom 1660000 to 320000.
Almost double the performance! And the cairo test result is the
same as without this patch.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit 1f14ab24d716644f22846d9134883d7dda9bf0b2
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Thu Jun 21 19:29:06 2012 +0800
glamor_render: Don't fallback when rendering glyphs with OpOver.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit 029ef43d5fe0148b12d832a638b2c8c8e39fd262
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Thu Jun 21 19:27:07 2012 +0800
glamor_create_pixmap: Allocate glyphs pixmap in memory.
As we have glyphs atlas cache, we don't need to hold each
glyphs on GPU. And for the subsequent optimization, we need
to store the original glyphs pixmap on system memory.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit ba625dc12634c50bc8183e64fbfb2827b94d931f
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Thu Jun 21 19:26:28 2012 +0800
glamor_fbo: fix a memory leak for large pixmap.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit 08e86e4b64b5c36b5d1db0d95effb79d82842f14
Author: Junyan He <junyan.he@linux.intel.com>
Date: Fri Jun 15 09:00:15 2012 +0800
Fix a bug for trapezoid clip
We find in some cases the trapezoid will be render as a triangle and
the left edge and right edge will cross with each other just bellow
the top or over the bottom. The distance between the cross poind and
the top or bottom is less than pixman_fixed_1_minus_e, so after the
fixed converted to int, the cross point has the same value with the
top or botton and the triangle should not be affected. But in our
clip logic, the cross point will be clipped out. So add a logic
to fix this problem.
Signed-off-by: Junyan He <junyan.he@linux.intel.com>
commit d9202dc2cb6aadfbc14983279649c2285c3e6501
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Fri Jun 15 13:31:30 2012 +0800
gles2_largepixmap: force clip for a non-large pixmap.
One case we need force clip when download/upload a drm_texture
pixmap. Actually, this is only meaningful for testing purpose.
As we may set the max_fbo_size to a very small value, but the
drm texture may exceed this value but the drm texture pixmap
is not largepixmap. This is not a problem with OpenGL. But for
GLES2, we may need to call glamor_es2_pixmap_read_prepare to
create a temporary fbo to do the color conversion. Then we have
to force clip the drm pixmap here to avoid large pixmap handling
at glamor_es2_pixmap_read_prepare.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit 291402b1a9abd7a1e747c71b2e7c7104d5061614
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Fri Jun 15 09:03:42 2012 +0800
glamor_emit_composite_vert: Optimize to don't do two times vert coping.
We change some macros to put the vert to the vertex buffer
directly when we cacluating it. This way, we can get about
4% performance gain.
This commit also fixed one RepeatPad bug, when we RepeatPad
a not eaxct size fbo. We need to calculate the edge. The edge
should be 1.0 - half point, not 1.0.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit 741a065f55fc78d624ef9c423d8c36d8d06a95c3
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Fri Jun 15 08:46:24 2012 +0800
glamor_glyphs: Before get upload to cache flush is needed.
When we can't get a cache hit and have to evict one cache
entry to upload new picture, we need to flush the previous
buffer. Otherwise, we may get corrupt glyphs rendering result.
This is the reason why user-font-proxy may fail sometimes.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit 996194140ce10b8c8b2b1cf8774c857fed4a6f24
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Fri Jun 15 08:43:37 2012 +0800
copyarea: Cleanup the error handling logic.
Should use ok rather than mixed ok or ret.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit 0604eb4aadf0162e7971b2e8b138174e376eb5e4
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Tue Jun 12 18:21:10 2012 +0800
trapezoid: Fallback to sw-rasterize for largepixmap.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit 566ba215aac7c191d85410b8794d28b561e0aff5
Author: Junyan He <junyan.he@linux.intel.com>
Date: Tue Jun 5 03:21:03 2012 +0800
Use the direct render path for A1
Because when mask depth is 1, there is no Anti-Alias at all,
in this case, the directly render can work well and it is faseter.
Signed-off-by: Junyan He <junyan.he@linux.intel.com>
commit 0bc9a5de83063976902866e4175effedd3ae5a1f
Author: Junyan He <junyan.he@linux.intel.com>
Date: Mon Jun 4 07:52:05 2012 +0800
Add the trapezoid direct render logic
We firstly get the render area by clipping the trapezoid
with the clip rect, then split the clipped area into small
triangles and use the composite logic to generate the result
directly. This manner is fast but have the problem that
some implementation of GL do not implement the Anti-Alias
of triangles fill, so the edge sometimes has sawtooth. It is
not acceptable when use trapezoid to approximate circles and
wide lines.
Signed-off-by: Junyan He <junyan.he@linux.intel.com>
commit 2133d22a7e57d0151051106fa15464218ae88385
Author: Junyan He <junyan.he@linux.intel.com>
Date: Mon Jun 4 07:22:27 2012 +0800
Modilfy the composite logic to two phases
We seperate the composite to two phases, firstly to
select the shader according to source type and logic
op, setting the right parameters. Then we emit the
vertex array to generate the dest result.
The reason why we do this is that the shader may be
used to composite no only rect, trapezoid and triangle
render function can also use it to render triangles and
polygens. The old function glamor_composite_with_shader
do the whole two phases work and can not match the
new request.
Signed-off-by: Junyan He <junyan.he@linux.intel.com>
commit 445ee22ac67976d8226f2ba743a3a6897781c404
Author: Junyan He <junyan.he@linux.intel.com>
Date: Mon Jun 4 03:18:40 2012 +0800
Add macro of vertex setting for triangle stripe
Add macro of vertex setting for triangle stripe draw,
and make the code clear.
Signed-off-by: Junyan He <junyan.he@linux.intel.com>
commit 2f6aa7a8d3fcae266b174fd629131616ef09686a
Author: RobinHe <robinhe@robinhe-desktop.lan>
Date: Sat Jun 2 22:00:09 2012 +0800
Use shader to generate the temp trapezoid mask
The old manner of trapezoid render uses pixman to
generate a mask pixmap and upload it to the GPU.
This effect the performance. We now use shader to
generate the temp trapezoid mask to avoid the
uploading of this pixmap.
We implement a anti-alias manner in the shader
according to pixman, which will caculate the area
inside the trapezoid dividing total area for every
pixel and assign it to the alpha value of that pixel.
The pixman use a int-to-fix manner to approximate but
the shader use float, so the result may have some
difference.
Because the array in the shader has optimization problem,
we need to emit the vertex of every trapezoid every
time, which will effect the performance a lot. Need to
improve it.
Signed-off-by: Junyan He <junyan.he@linux.intel.com>
commit 5f03910369012e1d9b973142f704d8488df57f59
Author: RobinHe <robinhe@robinhe-desktop.lan>
Date: Sat Jun 2 21:52:25 2012 +0800
Create the file glamor_triangles.c
Create the file glamor_trapezoid.c, extract the logic
relating to trapezoid from glamor_render.c to this file.
Signed-off-by: Junyan He <junyan.he@linux.intel.com>
commit 7ed0d760fbd4378c59fde4d88adc6eca2cb3ea95
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Mon Jun 11 14:02:59 2012 +0800
Enable large pixmap by default.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit 3ed87725dc79c6dd51598a4ed060ad8c53306d55
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Mon Jun 11 13:05:48 2012 +0800
largepixmap: Fix the selfcopy issue.
If the source and destination are the same pixmap/fbo, and we
need to split the copy to small pieces. Then we do need to
consider the sequence of the small pieces when the copy area
has overlaps. This commit take the reverse/upsidedown into
the clipping function, thus it can generate correct sequence
and avoid corruption self copying.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit d3e0c76f8cd17784b0b57ddaafe30c9996ac67de
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Mon Jun 11 11:42:46 2012 +0800
largepixmap: Support self composite for large pixmap.
The simplest way to support large pixmap's self compositing
is to just clone a pixmap private data structure, and change
the fbo and box to point to the correct postions. Don't need
to copy a new box.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit f3c06ebd10f1518f11d75ac563f1d671df51935a
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Mon Jun 11 09:36:56 2012 +0800
largepixmap: Add transform/repeat/reflect/pad support.
This commit implement almost all the needed functions for
the large pixmap support. It's almost complete.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit 503dc69c03421f2ea42089137c024eca2a137ff6
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Mon Jun 11 02:27:00 2012 +0800
glamor_getimage: should call miGetimage if failed to get sub-image.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit a0ae6978c712f5f8c325553d08d085693b9e6518
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Mon Jun 11 02:24:41 2012 +0800
glamor_putimage: Correct the wrong stride value.
We should not use the destination pixmap's devkind as the input
image data's stride.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit b0257c3a67798d44e0f8218ccc798c5392729c62
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Mon Jun 11 02:15:53 2012 +0800
largepixmap: Enable glamor_composite.
Now we start to enable glamor_composite on large pixmap.
We need to do a three layer clipping to split the dest/source/mask
to small pieces. This commit only support non-transformation and
repeat normal case.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit e836be57a45c3acee73251190593a882428fa7ed
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Mon Jun 11 01:52:14 2012 +0800
largepixmap: Implement infrastructure for large pixmap.
Added infrastructure for largepixmap, this commit implemented:
1. Create/Destroy large pixmap.
2. Upload/Download large pixmap.
3. Implement basic repeat normal support.
3. tile/fill/copyarea large pixmap get supported.
The most complicated part glamor_composite still not implemented.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit 25ba2dcf0e9858edc93fafa0d77f6d1a574bd833
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Mon Jun 11 01:02:30 2012 +0800
glamor_largepixmap: first commit for large pixmap.
This is the first commit to add support for large pixmap.
The large here means a pixmap is larger than the texutre's
size limitation thus can't fit into one single texutre.
The previous implementation will simply fallback to use a
in memory pixmap to contain the large pixmap which is
very slow in practice.
The basic idea here is to use an array of texture to hold
the large pixmap. And when we need to get a specific area
of the pixmap, we just need to compute/clip the correct
region and find the corresponding fbo.
We need to implement some auxiliary routines to clip every
rendering operations into small pieces which can fit into
one texture.
The complex part is the transformation/repeat/repeatReflect
and repeat pad and their comination. We will support all of
them step by step.
This commit just add some necessary data structure to represent
the large pixmap, and doesn't change any rendering process.
This commit doesn't add real large pixmap support.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit 6116de526bc174baa6292c216e44ad0109855d2d
Author: Junyan He <junyan.he@linux.intel.com>
Date: Tue May 15 10:08:03 2012 +0800
Fix the problem of x_source and y_source causing radial error
The x_source and y_source cause some problem in
gradient. The old way to handle it by recaulate P1 P2
to minus the x_source and y_source, but this causes
problem in radial shader. Now we modify the manner to
set the texture coordinates: (x_source, y_source) -->
(x_source + width, y_source + height) to handle all the
cases.
Reviewed-by: Zhigang Gong <zhigang.gong@linux.intel.com>
Signed-off-by: Junyan He <junyan.he@linux.intel.com>
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit ce9c97547cc5897e2435c20c11ce13ae45fffeff
Author: Junyan He <junyan.he@linux.intel.com>
Date: Tue May 15 10:07:55 2012 +0800
Fix the problem of vertical and horizontal case error in linear gradient.
1. The vertical and horizontal judgement in linear
gradient have problem when p1 point and p2 point
distance is very small but the gradient pict have a
transform matrix which will convert the X Y coordinates
to small values. So the judgement is not suitable.
Because this judgement's purpose is to assure the
divisor not to be zero, so we simply it to enter
horizontal judgement when p1 and p2's Y is same.
Vertical case is deleted. 2. Delete the unused p1 p2
uniform variable.
Reviewed-by: Zhigang Gong <zhigang.gong@linux.intel.com>
Signed-off-by: Junyan He <junyan.he@linux.intel.com>
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit 98402a908f36aebc1537a22d86d77667c25a1136
Author: Junyan He <junyan.he@linux.intel.com>
Date: Tue May 15 10:07:46 2012 +0800
Fix the problem of set the same stop several times.
Some gradient set the stops at the same position, for
example: firstly 0.5 to red color and then set 0.5 to
blue. This kind of setting will cause the shader work
not correctly because the percentage caculating need to
use the stop[i] - stop[i-1] as dividend. The previous
patch we just kill some stop if the distance between
them is 0. But this cause the problem that the color
for next stop is wrong. We now modify to handle it in
the shader to avoid the 0 as dividend.
Reviewed-by: Zhigang Gong <zhigang.gong@linux.intel.com>
Signed-off-by: Junyan He <junyan.he@linux.intel.com>
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit c1ec3ef1f0a86c5977d9623d1cbbc2159885d0af
Author: Junyan He <junyan.he@linux.intel.com>
Date: Tue May 15 10:07:35 2012 +0800
Fix a bugy macro definition.
The macro like "#define LINEAR_SMALL_STOPS 6 + 2" causes
the problem. When use it to define like "GLfloat
stop_colors_st[LINEAR_SMALL_STOPS*4];" The array is
small than what we supposed it to be. Cause memory
corruption problem and cause the bug of render wrong
result. Fix it.
Signed-off-by: Junyan He <junyan.he@linux.intel.com>
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit a3bbd3bc6299680ac6f4dd382ee403f556e15a92
Author: Junyan He <junyan.he@linux.intel.com>
Date: Tue May 15 10:07:24 2012 +0800
Extract the gradient related code out.
1. Extract the logic of gradient from the glamor_render.c
to the file glamor_gradient.c.
2. Modify the logic of gradient pixmap gl draw. Use the
logic like composite before, but the gradient always just
have one rect to render, so no need to set the VB and EB,
replace it with just call glDrawArrays. 3.Kill all the
warning in glamor_render.c
Reviewed-by: Zhigang Gong<zhigang.gong@linux.intel.com>
Signed-off-by: Junyan He <junyan.he@linux.intel.com>
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
commit da9563fd123263c5124ae336369d2aa8a5bdb9e4
Author: Zhigang Gong <zhigang.gong@linux.intel.com>
Date: Tue May 15 15:25:41 2012 +0800
glamor_set_destination_pixmap_priv_nc: set drawable's width x height.
Previous implementation set the whole fbo's width and height as the
viewpoint. This may increase the numerical error as we may only has
Reply to: