Most testcases are now passing like the ARB_texture_non_power_of_two
case. EXT_texture_rectangle support is dropped in favor of
ARB_texture_non_power_of_two. If we have issues with drivers not
having that but having EXT (which just lacks the GLSL part of the
spec), we can split it out. Right now non-GLSL support in cairo-gl is
probably in bad shape anyway and will require someone that cares for
it in order to get fixed up.
The only issue is the repeat modes aren't supported for rectangular
textures. In any case even with ARB_npot radeon's pre-r600 lie and
fail to do repeats anyway.
This code is stolen straight from cairo-drm-intel.c. This saves a
bunch of time calculating interpolated points when we just do
interpolation between points at sampling time anyway. Reduces
firefox-talos-svg from 47 seconds back to the 42 it was at before the
pixman change.
This regresses the reported result of huge-radial, but there's no
visible difference.
... and fix the compile errors from it I get on my build.
It's Cairo style to put declarations before the code, so better warn
about it.
Besides, it eases porting to old compilers like MSVC.
If a signal interrupts the SET_TILING ioctl, the tiling and stride
values are updated to reflect the current condition of the buffer, so we
need to restore those to the desired values before repeating the ioctl.
This is significantly cribbed from Zach Laine's work, but reworked so
that gradients can be plugged in as either source or mask operands for
any of the paths.
This is significantly cribbed from Zach Laine's work, but reworked so
that gradients can be plugged in as either source or mask operands for
any of the paths.
This cuts the runtime of firefox-talos-svg in half on my GM45, at the
expense of gradient-alpha. surface-pattern-operator also now fails
due to small rasterization differences.
Rather than have fragment shaders try to walk a variable-length set of
stops and try to compute the interpolation between the nearest stops
per fragment, we make a little texture representing the gradient along
a line and have the shaders compute texture coordinates along the line
and sample. This should be a good tradeoff between CPU work and GPU
work.
[anholt: I pulled this set of code out of Zach Laine's tree to use for
gradient acceleration, and wanted to make sure attribution was
appropriate. I applied only minor tweaking]
This reduces the CPU work in translating fixed function state to
shaders, but currently is a slight cost on GM45 because we end up
changing shaders more frequently since other parts of the pipeline are
doing fixed function still.
Adds cairo_gl_shader_program_t, and functions to manipulate same. Multiple GL
entry points for shaders are provided -- one for the pre-GL 2.0 extenstions
entry points, and one for GL 2.0. This code is well tested, but currently
unused in the GL backend.
_cairo_quartz_surface_paint will never fail as it falls back to image
when CoreGraphics can't handle the requested operation. This means that
upon fallback the ClipImage set by the masking code gets ignored, thus
the mask fallback path is broken. Using the _cg function ensures that
masking is either completely done by CoreGraphics, or the fallback path
passes the mask operation to image.
The fallback path shouldn't be used anymore, thus fallbacks are now
handled by passing unsupported ops to the image backend.
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Fixes test/clip-empty-save.
The all-clipped flag was not being copied to the new clip, which occurs
for instance when an empty clip is pushed via a gstate save.
This reverts commit 26e9f14906 on
cairo-path-stroke.
The changes in cairo-path-stroke are not needed anymore since dash
pattern approximation is now done in gstate before passing the dash
pattern to the backend.
Since approximation is only done when the pattern is sub-tolerance,
it is acceptable to apply it even for vector backends.
By doing it once and for all backends, backends are guaranteed to have
non-degenerate input.
Acked-by: Adrian Johnson <ajohnson@redneon.com>