Bug 46277

Summary: No result from pixman_image_composite32() with bigger transform
Product: pixman Reporter: Uli Schlachter <psychon>
Component: pixmanAssignee: Siarhei Siamashka <siarhei.siamashka>
Status: RESOLVED MOVED QA Contact: Søren Sandmann Pedersen <soren.sandmann>
Severity: normal    
Priority: medium CC: ajohnson, siarhei.siamashka
Version: git master   
Hardware: Other   
OS: All   
i915 platform: i915 features:
Attachments: Test case using just pixman
Test case using cairo

Description Uli Schlachter 2012-02-19 02:48:17 UTC
Created attachment 57269 [details]
Test case using just pixman

Attached are two tests programs. The cairo one should produce a file "out.png" completely filled with blue, but instead the PNG is transparent.

The pixman test does (more or less) the same calls to pixman as cairo does when executing the above test. This should output "ff0000ff", but instead just says "0".

The pixman test has an "#if 0" at the beginning. When that is replaced with "#if 1", the correct result is generated.
The cairo test has the equivalent of this "#if" in lines 21/22. Depending on which of the two lines is uncommented, the test works or doesn't work.
Comment 1 Uli Schlachter 2012-02-19 02:49:06 UTC
Created attachment 57270 [details]
Test case using cairo
Comment 2 Søren Sandmann Pedersen 2012-02-20 17:49:15 UTC
This is almost certainly because the transformation implies that coordinates outside of the 16.16 coordinate space are used. If so, it's a long-standing and hard-to-fix issue that probably involves using floating point for transformations.
Comment 3 Siarhei Siamashka 2012-02-24 06:02:23 UTC
In my opinion the issue is indeed hard to fix, but not impossible. This can be probably handled by generalizing fixed point support in the code (allow representations other than 16.16) and making sure that as many problems as possible are detected by the test suite. Using some toy 8.8 fixed point representation as a default can be used to check how the corner cases are handled and experiment with automatic promotion to something bigger (16.16 or more).

Floating point coordinates are also an option. They are harder to test due to non-bitexact results. But if the code is first adapted to support multiple fixed point representations, then just dropping in another representation (floating point one) should be much less painful.
Comment 4 Siarhei Siamashka 2014-09-21 22:24:10 UTC
Now this particular problem should be easier to fix after the introduction of http://cgit.freedesktop.org/pixman/commit/?id=c3deb8334a71998b986a7b8d5b74bedf26cc23aa
Comment 5 GitLab Migration User 2018-06-05 15:26:31 UTC
-- GitLab Migration Automatic Message --

This bug has been migrated to freedesktop.org's GitLab instance and has been closed from further activity.

You can subscribe and participate further through the new bug through this link to our GitLab instance: https://gitlab.freedesktop.org/pixman/pixman/issues/1.

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.