[RFC weston] compositor: optimize/simplify shaders

Pekka Paalanen ppaalanen at gmail.com
Fri Aug 31 06:58:24 PDT 2012


On Fri, 31 Aug 2012 12:27:38 +0300
Pekka Paalanen <ppaalanen at gmail.com> wrote:

> On Thu, 30 Aug 2012 12:15:52 -0500
> Rob Clark <rob.clark at linaro.org> wrote:
> 
> > On Thu, Aug 30, 2012 at 6:11 AM, Pekka Paalanen <ppaalanen at gmail.com> wrote:
> > > I got these with your 'pq' branch:
> > >
> > > http://people.collabora.com/~pq/geometry-debug-6.png
> > > It appears the clean-up painting paints something wrong, but I haven't
> > > been able to reproduce that otherwise. The flower is rotated about 45
> > > degrees. Notice the three green pixels down from the word "Thu" in the
> > > panel clock. Those pixels flicker when I move the mouse cursor, even
> > > though there should not be damage anywhere near. The green pixels are
> > > where the surface's top-left corner is.
> > 
> > three green pixels sound like some garbage left on one of the
> > flipchain buffers..  I guess that itself is just from the debug lines,
> > although the flower itself looks a bit messed up.
> 
> No, they flash and are very consistent, and follow the flower, even
> when there is no real triangle reaching that point, when I stop
> moving. I suspect there is a tiny bunch of at least three vertices.
> I will try to reproduce it with the cliptest program, or least verify
> with prints if there are extra vertices.

I couldn't find the problem in cliptest, but I printed the vertices,
and this looks suspicious:

region verts: (56.9, 44.9) (56.9, 44.7) (57.0, 44.8) (57.0, 45.0) (56.7, 45.0) (56.9, 44.7)

Those are what emit_vertex() was called with for a single
texture_region() call. The coordinates fit well to the three pixel
flashing garbage I see, and nothing else was near those coords.

I now realize I should've printed out a little differently to be more
useful.

> > > http://people.collabora.com/~pq/geometry-debug-7.png
> > > This shows a problem with screen-aligned surfaces. The center vertex is
> > > not in the center, implying that there are duplicate vertices. Good
> > > thing I didn't remove the center vertex yet.
> > 
> > hmm, yeah, this stuff is kinda relying on the duplicate vertex check
> > in append_vertex()..
> > 
> > 		if (x1 == x2) {
> > 			append_vertex(clip(x1, cx1, cx2), clip(y1, cy1, cy2));
> > 			append_vertex(clip(x2, cx1, cx2), clip(y2, cy1, cy2));
> > 		} else if (y1 == y2) {
> > 			append_vertex(clip(x1, cx1, cx2), clip(y1, cy1, cy2));
> > 			append_vertex(clip(x2, cx1, cx2), clip(y2, cy1, cy2));
> > 		} else {
> > 
> > but I guess maybe we end up w/ a duplicate vertex which isn't the last
> > vertex..  so this part is probably still not right..
> 
> Yeah, I'll try to reproduce problems with cliptest, and get you
> screenshots.

I couldn't find exactly duplicated vertices in cliptest, but I found
problems:

http://people.collabora.com/~pq/geometry-test-1.png
http://people.collabora.com/~pq/geometry-test-2.png
http://people.collabora.com/~pq/geometry-test-3.png
http://people.collabora.com/~pq/geometry-test-4.png
http://people.collabora.com/~pq/geometry-test-5.png
http://people.collabora.com/~pq/geometry-test-6.png

Later I added surface orientation mark (the red dot) and vertex
indices:
http://people.collabora.com/~pq/geometry-test-7.png
This one shows a correct result.

The latest cliptest is at
http://cgit.collabora.com/git/user/pq/wayland-demos.git/log/?h=shaders
and hopefully the copy of calculate_edges() is still up-to-date.
Cliptest is controlled by mouse left and right drag, and wheel.


HTH,
pq


More information about the wayland-devel mailing list