mirror of
https://salsa.debian.org/xorg-team/lib/pixman
synced 2025-09-03 15:31:12 +00:00
Compare commits
No commits in common. "debian-unstable" and "pixman-0.11.6-1" have entirely different histories.
debian-uns
...
pixman-0.1
@ -1,11 +0,0 @@
|
||||
# To use this config on you editor, follow the instructions at:
|
||||
# http://editorconfig.org
|
||||
|
||||
root = true
|
||||
|
||||
[*]
|
||||
tab_width = 8
|
||||
|
||||
[meson.build,meson_options.txt]
|
||||
indent_style = space
|
||||
indent_size = 2
|
27
.gitignore
vendored
27
.gitignore
vendored
@ -3,7 +3,6 @@ Makefile.in
|
||||
.deps
|
||||
.libs
|
||||
.msg
|
||||
*.pc
|
||||
*.lo
|
||||
*.la
|
||||
*.a
|
||||
@ -22,35 +21,17 @@ install-sh
|
||||
libtool
|
||||
ltmain.sh
|
||||
missing
|
||||
pixman-1.pc
|
||||
stamp-h?
|
||||
config.h
|
||||
config.h.in
|
||||
.*.swp
|
||||
demos/*-test
|
||||
demos/checkerboard
|
||||
demos/clip-in
|
||||
demos/linear-gradient
|
||||
demos/quad2quad
|
||||
demos/scale
|
||||
demos/dither
|
||||
pixman/pixman-srgb.c
|
||||
pixman/pixman-version.h
|
||||
test/*-test
|
||||
test/affine-bench
|
||||
test/alpha-loop
|
||||
test/alphamap
|
||||
test/check-formats
|
||||
test/clip-in
|
||||
test/composite
|
||||
test/infinite-loop
|
||||
test/lowlevel-blt-bench
|
||||
test/radial-invalid
|
||||
test/region-translate
|
||||
test/scaling-bench
|
||||
test/trap-crasher
|
||||
test/composite-test
|
||||
test/fetch-test
|
||||
test/gradient-test
|
||||
*.pdb
|
||||
*.dll
|
||||
*.lib
|
||||
*.ilk
|
||||
*.obj
|
||||
*.exe
|
||||
|
@ -1,80 +0,0 @@
|
||||
# Docker build stage
|
||||
#
|
||||
# It builds a multi-arch image for all required architectures. Each image can be
|
||||
# later easily used with properly configured Docker (which uses binfmt and QEMU
|
||||
# underneath).
|
||||
|
||||
docker:
|
||||
stage: docker
|
||||
image: quay.io/buildah/stable
|
||||
rules:
|
||||
- if: "$CI_PIPELINE_SOURCE == 'merge_request_event' && $TARGET =~ $ACTIVE_TARGET_PATTERN"
|
||||
changes:
|
||||
paths:
|
||||
- .gitlab-ci.d/01-docker.yml
|
||||
- .gitlab-ci.d/01-docker/**/*
|
||||
variables:
|
||||
DOCKER_TAG: $CI_COMMIT_REF_SLUG
|
||||
DOCKER_IMAGE_NAME: ${CI_REGISTRY_IMAGE}/pixman:${DOCKER_TAG}
|
||||
- if: "$CI_PIPELINE_SOURCE == 'schedule' && $TARGET =~ $ACTIVE_TARGET_PATTERN"
|
||||
- if: "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $TARGET =~ $ACTIVE_TARGET_PATTERN"
|
||||
- if: "$CI_COMMIT_TAG && $TARGET =~ $ACTIVE_TARGET_PATTERN"
|
||||
|
||||
variables:
|
||||
# Use vfs with buildah. Docker offers overlayfs as a default, but Buildah
|
||||
# cannot stack overlayfs on top of another overlayfs filesystem.
|
||||
STORAGE_DRIVER: vfs
|
||||
|
||||
# Write all image metadata in the docker format, not the standard OCI
|
||||
# format. Newer versions of docker can handle the OCI format, but older
|
||||
# versions, like the one shipped with Fedora 30, cannot handle the format.
|
||||
BUILDAH_FORMAT: docker
|
||||
|
||||
BUILDAH_ISOLATION: chroot
|
||||
CACHE_IMAGE: ${CI_REGISTRY_IMAGE}/cache
|
||||
CACHE_ARGS: --cache-from ${CACHE_IMAGE} --cache-to ${CACHE_IMAGE}
|
||||
before_script:
|
||||
# Login to the target registry.
|
||||
- echo "${CI_REGISTRY_PASSWORD}" |
|
||||
buildah login -u "${CI_REGISTRY_USER}" --password-stdin ${CI_REGISTRY}
|
||||
|
||||
# Docker Hub login is optional, and can be used to circumvent image pull
|
||||
# quota for anonymous pulls for base images.
|
||||
- echo "${DOCKERHUB_PASSWORD}" |
|
||||
buildah login -u "${DOCKERHUB_USER}" --password-stdin docker.io ||
|
||||
echo "Failed to login to Docker Hub."
|
||||
parallel:
|
||||
matrix:
|
||||
- TARGET:
|
||||
- linux-386
|
||||
- linux-amd64
|
||||
- linux-arm-v5
|
||||
- linux-arm-v7
|
||||
- linux-arm64-v8
|
||||
- linux-mips
|
||||
- linux-mips64el
|
||||
- linux-mipsel
|
||||
- linux-ppc
|
||||
- linux-ppc64
|
||||
- linux-ppc64le
|
||||
- linux-riscv64
|
||||
- windows-686
|
||||
- windows-amd64
|
||||
- windows-arm64-v8
|
||||
script:
|
||||
# Prepare environment.
|
||||
- ${LOAD_TARGET_ENV}
|
||||
- FULL_IMAGE_NAME=${DOCKER_IMAGE_NAME}-${TARGET}
|
||||
|
||||
# Build and push the image.
|
||||
- buildah bud
|
||||
--tag ${FULL_IMAGE_NAME}
|
||||
--layers ${CACHE_ARGS}
|
||||
--target ${TARGET}
|
||||
--platform=${DOCKER_PLATFORM}
|
||||
--build-arg BASE_IMAGE=${BASE_IMAGE}
|
||||
--build-arg BASE_IMAGE_TAG=${BASE_IMAGE_TAG}
|
||||
--build-arg LLVM_VERSION=${LLVM_VERSION}
|
||||
-f Dockerfile .gitlab-ci.d/01-docker/
|
||||
- buildah images
|
||||
- buildah push ${FULL_IMAGE_NAME}
|
@ -1,150 +0,0 @@
|
||||
ARG BASE_IMAGE=docker.io/debian
|
||||
ARG BASE_IMAGE_TAG=bookworm-slim
|
||||
FROM ${BASE_IMAGE}:${BASE_IMAGE_TAG} AS base
|
||||
|
||||
LABEL org.opencontainers.image.title="Pixman build environment for platform coverage" \
|
||||
org.opencontainers.image.authors="Marek Pikuła <m.pikula@partner.samsung.com>"
|
||||
|
||||
ARG DEBIAN_FRONTEND=noninteractive
|
||||
ENV APT_UPDATE="apt-get update" \
|
||||
APT_INSTALL="apt-get install -y --no-install-recommends" \
|
||||
APT_CLEANUP="rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/*"
|
||||
|
||||
ARG GCOVR_VERSION="~=7.2"
|
||||
ARG MESON_VERSION="~=1.6"
|
||||
RUN ${APT_UPDATE} \
|
||||
&& ${APT_INSTALL} \
|
||||
# Build dependencies.
|
||||
build-essential \
|
||||
ninja-build \
|
||||
pkg-config \
|
||||
qemu-user \
|
||||
# pipx dependencies.
|
||||
python3-argcomplete \
|
||||
python3-packaging \
|
||||
python3-pip \
|
||||
python3-platformdirs \
|
||||
python3-userpath \
|
||||
python3-venv \
|
||||
# gcovr dependencies.
|
||||
libxml2-dev \
|
||||
libxslt-dev \
|
||||
python3-dev \
|
||||
&& ${APT_CLEANUP} \
|
||||
# Install pipx using pip to have a more recent version of pipx, which
|
||||
# supports the `--global` flag.
|
||||
&& pip install pipx --break-system-packages \
|
||||
# Install a recent version of meson and gcovr using pipx to have the same
|
||||
# version across all variants regardless of base.
|
||||
&& pipx install --global \
|
||||
gcovr${GCOVR_VERSION} \
|
||||
meson${MESON_VERSION} \
|
||||
&& gcovr --version \
|
||||
&& echo Meson version: \
|
||||
&& meson --version
|
||||
|
||||
FROM base AS llvm-base
|
||||
# LLVM 16 is the highest available in Bookworm. Preferably, we should use the
|
||||
# same version for all platforms, but it's not possible at the moment.
|
||||
ARG LLVM_VERSION=16
|
||||
RUN ${APT_UPDATE} \
|
||||
&& ${APT_INSTALL} \
|
||||
clang-${LLVM_VERSION} \
|
||||
libclang-rt-${LLVM_VERSION}-dev \
|
||||
lld-${LLVM_VERSION} \
|
||||
llvm-${LLVM_VERSION} \
|
||||
&& ${APT_CLEANUP} \
|
||||
&& ln -f /usr/bin/clang-${LLVM_VERSION} /usr/bin/clang \
|
||||
&& ln -f /usr/bin/lld-${LLVM_VERSION} /usr/bin/lld \
|
||||
&& ln -f /usr/bin/llvm-ar-${LLVM_VERSION} /usr/bin/llvm-ar \
|
||||
&& ln -f /usr/bin/llvm-strip-${LLVM_VERSION} /usr/bin/llvm-strip
|
||||
|
||||
FROM llvm-base AS native-base
|
||||
ARG LLVM_VERSION=16
|
||||
RUN ${APT_UPDATE} \
|
||||
&& ${APT_INSTALL} \
|
||||
# Runtime library dependencies.
|
||||
libglib2.0-dev \
|
||||
libgtk-3-dev \
|
||||
libpng-dev \
|
||||
# Install libomp-dev if available (OpenMP support for LLVM). It's done only
|
||||
# for the native images, as OpenMP support in cross-build environment is
|
||||
# tricky for LLVM.
|
||||
&& (${APT_INSTALL} libomp-${LLVM_VERSION}-dev \
|
||||
|| echo "OpenMP not available on this platform.") \
|
||||
&& ${APT_CLEANUP}
|
||||
|
||||
# The following targets differ in BASE_IMAGE.
|
||||
FROM native-base AS linux-386
|
||||
FROM native-base AS linux-amd64
|
||||
FROM native-base AS linux-arm-v5
|
||||
FROM native-base AS linux-arm-v7
|
||||
FROM native-base AS linux-arm64-v8
|
||||
FROM native-base AS linux-mips64el
|
||||
FROM native-base AS linux-mipsel
|
||||
FROM native-base AS linux-ppc64le
|
||||
FROM native-base AS linux-riscv64
|
||||
|
||||
# The following targets should have a common BASE_IMAGE.
|
||||
FROM llvm-base AS linux-mips
|
||||
RUN ${APT_UPDATE} \
|
||||
&& ${APT_INSTALL} gcc-multilib-mips-linux-gnu \
|
||||
&& ${APT_CLEANUP}
|
||||
|
||||
FROM llvm-base AS linux-ppc
|
||||
RUN ${APT_UPDATE} \
|
||||
&& ${APT_INSTALL} gcc-multilib-powerpc-linux-gnu \
|
||||
&& ${APT_CLEANUP}
|
||||
|
||||
FROM llvm-base AS linux-ppc64
|
||||
RUN ${APT_UPDATE} \
|
||||
&& ${APT_INSTALL} gcc-multilib-powerpc64-linux-gnu \
|
||||
&& ${APT_CLEANUP}
|
||||
|
||||
# We use a common image for Windows i686 and amd64, as it doesn't make sense to
|
||||
# make them separate in terms of build time and image size. After two runs they
|
||||
# should use the same cache layers, so in the end it makes the collective image
|
||||
# size smaller.
|
||||
FROM base AS windows-base
|
||||
ARG LLVM_MINGW_RELEASE=20240619
|
||||
ARG LLVM_MINGW_VARIANT=llvm-mingw-${LLVM_MINGW_RELEASE}-msvcrt-ubuntu-20.04-x86_64
|
||||
RUN ${APT_UPDATE} \
|
||||
&& ${APT_INSTALL} wget \
|
||||
&& ${APT_CLEANUP} \
|
||||
&& cd /opt \
|
||||
&& wget https://github.com/mstorsjo/llvm-mingw/releases/download/${LLVM_MINGW_RELEASE}/${LLVM_MINGW_VARIANT}.tar.xz \
|
||||
&& tar -xf ${LLVM_MINGW_VARIANT}.tar.xz \
|
||||
&& rm -f ${LLVM_MINGW_VARIANT}.tar.xz
|
||||
ENV PATH=${PATH}:/opt/${LLVM_MINGW_VARIANT}/bin
|
||||
|
||||
FROM windows-base AS windows-x86-base
|
||||
RUN dpkg --add-architecture i386 \
|
||||
&& ${APT_UPDATE} \
|
||||
&& ${APT_INSTALL} \
|
||||
gcc-mingw-w64-i686 \
|
||||
gcc-mingw-w64-x86-64 \
|
||||
mingw-w64-tools \
|
||||
procps \
|
||||
wine \
|
||||
wine32 \
|
||||
wine64 \
|
||||
&& ${APT_CLEANUP} \
|
||||
# Inspired by https://code.videolan.org/videolan/docker-images
|
||||
&& wine wineboot --init \
|
||||
&& while pgrep wineserver > /dev/null; do \
|
||||
echo "waiting ..."; \
|
||||
sleep 1; \
|
||||
done \
|
||||
&& rm -rf /tmp/wine-*
|
||||
|
||||
FROM windows-x86-base AS windows-686
|
||||
FROM windows-x86-base AS windows-amd64
|
||||
|
||||
# aarch64 image requires linaro/wine-arm64 as a base.
|
||||
FROM windows-base AS windows-arm64-v8
|
||||
RUN wine-arm64 wineboot --init \
|
||||
&& while pgrep wineserver > /dev/null; do \
|
||||
echo "waiting ..."; \
|
||||
sleep 1; \
|
||||
done \
|
||||
&& rm -rf /tmp/wine-*
|
@ -1,4 +0,0 @@
|
||||
DOCKER_PLATFORM=linux/386
|
||||
BASE_IMAGE=docker.io/i386/debian
|
||||
BASE_IMAGE_TAG=bookworm-slim
|
||||
LLVM_VERSION=16
|
@ -1,4 +0,0 @@
|
||||
DOCKER_PLATFORM=linux/amd64
|
||||
BASE_IMAGE=docker.io/amd64/debian
|
||||
BASE_IMAGE_TAG=bookworm-slim
|
||||
LLVM_VERSION=16
|
@ -1,4 +0,0 @@
|
||||
DOCKER_PLATFORM=linux/arm/v5
|
||||
BASE_IMAGE=docker.io/arm32v5/debian
|
||||
BASE_IMAGE_TAG=bookworm-slim
|
||||
LLVM_VERSION=16
|
@ -1,4 +0,0 @@
|
||||
DOCKER_PLATFORM=linux/arm/v7
|
||||
BASE_IMAGE=docker.io/arm32v7/debian
|
||||
BASE_IMAGE_TAG=bookworm-slim
|
||||
LLVM_VERSION=16
|
@ -1,4 +0,0 @@
|
||||
DOCKER_PLATFORM=linux/arm64/v8
|
||||
BASE_IMAGE=docker.io/arm64v8/debian
|
||||
BASE_IMAGE_TAG=bookworm-slim
|
||||
LLVM_VERSION=16
|
@ -1,4 +0,0 @@
|
||||
DOCKER_PLATFORM=linux/amd64
|
||||
BASE_IMAGE=docker.io/amd64/debian
|
||||
BASE_IMAGE_TAG=bookworm-slim
|
||||
LLVM_VERSION=16
|
@ -1,4 +0,0 @@
|
||||
DOCKER_PLATFORM=linux/mips64el
|
||||
BASE_IMAGE=docker.io/mips64le/debian
|
||||
BASE_IMAGE_TAG=bookworm-slim
|
||||
LLVM_VERSION=16
|
@ -1,4 +0,0 @@
|
||||
DOCKER_PLATFORM=linux/mipsel
|
||||
BASE_IMAGE=docker.io/serenitycode/debian-debootstrap
|
||||
BASE_IMAGE_TAG=mipsel-bookworm-slim
|
||||
LLVM_VERSION=14
|
@ -1 +0,0 @@
|
||||
linux-amd64.env
|
@ -1 +0,0 @@
|
||||
linux-amd64.env
|
@ -1,4 +0,0 @@
|
||||
DOCKER_PLATFORM=linux/ppc64le
|
||||
BASE_IMAGE=docker.io/ppc64le/debian
|
||||
BASE_IMAGE_TAG=bookworm-slim
|
||||
LLVM_VERSION=16
|
@ -1,4 +0,0 @@
|
||||
DOCKER_PLATFORM=linux/riscv64
|
||||
BASE_IMAGE=docker.io/riscv64/debian
|
||||
BASE_IMAGE_TAG=sid-slim
|
||||
LLVM_VERSION=18
|
@ -1 +0,0 @@
|
||||
linux-amd64.env
|
@ -1 +0,0 @@
|
||||
linux-amd64.env
|
@ -1,3 +0,0 @@
|
||||
DOCKER_PLATFORM=linux/amd64
|
||||
BASE_IMAGE=docker.io/linaro/wine-arm64
|
||||
BASE_IMAGE_TAG=latest
|
@ -1,107 +0,0 @@
|
||||
# Build stage
|
||||
#
|
||||
# This stage builds pixman with enabled coverage for all supported
|
||||
# architectures.
|
||||
#
|
||||
# Some targets don't support atomic profile update, so to decrease the number of
|
||||
# gcov errors, they need to be built without OpenMP (single threaded) by adding
|
||||
# `-Dopenmp=disabled` Meson argument.
|
||||
|
||||
variables:
|
||||
# Used in test stage as well.
|
||||
BUILD_DIR: build-${TOOLCHAIN}
|
||||
|
||||
# Applicable to all build targets.
|
||||
|
||||
include:
|
||||
- local: .gitlab-ci.d/templates/build.yml
|
||||
inputs:
|
||||
target: linux-386
|
||||
- local: .gitlab-ci.d/templates/build.yml
|
||||
inputs:
|
||||
target: linux-amd64
|
||||
- local: .gitlab-ci.d/templates/build.yml
|
||||
inputs:
|
||||
target: linux-arm-v5
|
||||
qemu_cpu: arm1136
|
||||
# Disable coverage, as the tests take too long to run with a single thread.
|
||||
enable_gnu_coverage: false
|
||||
- local: .gitlab-ci.d/templates/build.yml
|
||||
inputs:
|
||||
target: linux-arm-v7
|
||||
qemu_cpu: max
|
||||
- local: .gitlab-ci.d/templates/build.yml
|
||||
inputs:
|
||||
target: linux-arm64-v8
|
||||
qemu_cpu: max
|
||||
- local: .gitlab-ci.d/templates/build.yml
|
||||
inputs:
|
||||
target: linux-mips
|
||||
toolchain: [gnu]
|
||||
qemu_cpu: 74Kf
|
||||
enable_gnu_coverage: false
|
||||
# TODO: Merge with the one above once the following issue is resolved:
|
||||
# https://gitlab.freedesktop.org/pixman/pixman/-/issues/105).
|
||||
- local: .gitlab-ci.d/templates/build.yml
|
||||
inputs:
|
||||
target: linux-mips
|
||||
toolchain: [llvm]
|
||||
qemu_cpu: 74Kf
|
||||
job_name_prefix: "."
|
||||
job_name_suffix: ":failing"
|
||||
allow_failure: true
|
||||
retry: 0
|
||||
- local: .gitlab-ci.d/templates/build.yml
|
||||
inputs:
|
||||
target: linux-mips64el
|
||||
qemu_cpu: Loongson-3A4000
|
||||
- local: .gitlab-ci.d/templates/build.yml
|
||||
inputs:
|
||||
target: linux-mipsel
|
||||
toolchain: [gnu]
|
||||
qemu_cpu: 74Kf
|
||||
# Disable coverage, as the tests take too long to run with a single thread.
|
||||
enable_gnu_coverage: false
|
||||
# TODO: Merge with the one above once the following issue is resolved:
|
||||
# https://gitlab.freedesktop.org/pixman/pixman/-/issues/105).
|
||||
- local: .gitlab-ci.d/templates/build.yml
|
||||
inputs:
|
||||
target: linux-mipsel
|
||||
toolchain: [llvm]
|
||||
qemu_cpu: 74Kf
|
||||
job_name_prefix: "."
|
||||
job_name_suffix: ":failing"
|
||||
allow_failure: true
|
||||
retry: 0
|
||||
- local: .gitlab-ci.d/templates/build.yml
|
||||
inputs:
|
||||
target: linux-ppc
|
||||
qemu_cpu: g4
|
||||
enable_gnu_coverage: false
|
||||
- local: .gitlab-ci.d/templates/build.yml
|
||||
inputs:
|
||||
target: linux-ppc64
|
||||
qemu_cpu: ppc64
|
||||
enable_gnu_coverage: false
|
||||
- local: .gitlab-ci.d/templates/build.yml
|
||||
inputs:
|
||||
target: linux-ppc64le
|
||||
qemu_cpu: power10
|
||||
- local: .gitlab-ci.d/templates/build.yml
|
||||
inputs:
|
||||
target: linux-riscv64
|
||||
qemu_cpu: rv64
|
||||
- local: .gitlab-ci.d/templates/build.yml
|
||||
inputs:
|
||||
target: windows-686
|
||||
enable_gnu_coverage: false
|
||||
- local: .gitlab-ci.d/templates/build.yml
|
||||
inputs:
|
||||
target: windows-amd64
|
||||
enable_gnu_coverage: false
|
||||
- local: .gitlab-ci.d/templates/build.yml
|
||||
inputs:
|
||||
target: windows-arm64-v8
|
||||
toolchain: [llvm] # GNU toolchain doesn't seem to support Windows on ARM.
|
||||
qemu_cpu: max
|
||||
enable_gnu_coverage: false
|
@ -1,175 +0,0 @@
|
||||
# Test stage
|
||||
#
|
||||
# This stage executes the test suite for pixman for all architectures in
|
||||
# different configurations. Build and test is split, as some architectures can
|
||||
# have different QEMU configuration or have multiple supported pixman backends,
|
||||
# which are executed as job matrix.
|
||||
#
|
||||
# Mind that `PIXMAN_ENABLE` variable in matrix runs does nothing, but it looks
|
||||
# better in CI to indicate what is actually being tested.
|
||||
#
|
||||
# Some emulated targets are really slow or cannot be run in multithreaded mode
|
||||
# (mipsel, arm-v5). Thus coverage reporting is disabled for them.
|
||||
|
||||
variables:
|
||||
# Used in summary stage as well.
|
||||
COVERAGE_BASE_DIR: coverage
|
||||
COVERAGE_OUT: ${COVERAGE_BASE_DIR}/${CI_JOB_ID}
|
||||
TEST_NAME: "" # Allow to specify a set of tests to run with run variables.
|
||||
|
||||
include:
|
||||
- local: .gitlab-ci.d/templates/test.yml
|
||||
inputs:
|
||||
target: linux-386
|
||||
toolchain: [gnu]
|
||||
pixman_disable:
|
||||
- "sse2 ssse3" # Testing "mmx"
|
||||
- "mmx ssse3" # Testing "sse2"
|
||||
- "mmx sse2" # Testing "ssse3"
|
||||
# TODO: Merge up after resolving
|
||||
# https://gitlab.freedesktop.org/pixman/pixman/-/issues/106
|
||||
- local: .gitlab-ci.d/templates/test.yml
|
||||
inputs:
|
||||
target: linux-386
|
||||
toolchain: [llvm]
|
||||
pixman_disable:
|
||||
# Same as above.
|
||||
- "sse2 ssse3"
|
||||
- "mmx ssse3"
|
||||
- "mmx sse2"
|
||||
job_name_prefix: "."
|
||||
job_name_suffix: ":failing"
|
||||
allow_failure: true
|
||||
retry: 0
|
||||
- local: .gitlab-ci.d/templates/test.yml
|
||||
inputs:
|
||||
target: linux-amd64
|
||||
pixman_disable:
|
||||
- ""
|
||||
- "fast"
|
||||
- "wholeops"
|
||||
- local: .gitlab-ci.d/templates/test.yml
|
||||
inputs:
|
||||
target: linux-arm-v5
|
||||
toolchain: [gnu]
|
||||
qemu_cpu: [arm1136]
|
||||
pixman_disable: ["arm-neon"] # Test only arm-simd.
|
||||
timeout: 3h
|
||||
test_timeout_multiplier: 40
|
||||
# TODO: Merge up after resolving
|
||||
# https://gitlab.freedesktop.org/pixman/pixman/-/issues/107
|
||||
- local: .gitlab-ci.d/templates/test.yml
|
||||
inputs:
|
||||
target: linux-arm-v5
|
||||
toolchain: [llvm]
|
||||
qemu_cpu: [arm1136]
|
||||
pixman_disable: ["arm-neon"] # Test only arm-simd.
|
||||
timeout: 3h
|
||||
test_timeout_multiplier: 40
|
||||
job_name_prefix: "."
|
||||
job_name_suffix: ":failing"
|
||||
allow_failure: true
|
||||
retry: 0
|
||||
- local: .gitlab-ci.d/templates/test.yml
|
||||
inputs:
|
||||
target: linux-arm-v7
|
||||
qemu_cpu: [max]
|
||||
- local: .gitlab-ci.d/templates/test.yml
|
||||
inputs:
|
||||
target: linux-arm64-v8
|
||||
qemu_cpu: [max]
|
||||
- local: .gitlab-ci.d/templates/test.yml
|
||||
inputs:
|
||||
target: linux-mips
|
||||
toolchain: [gnu] # TODO: Add llvm once the build is fixed.
|
||||
qemu_cpu: [74Kf]
|
||||
job_name_prefix: "."
|
||||
job_name_suffix: ":failing"
|
||||
allow_failure: true # Some tests seem to fail.
|
||||
retry: 0
|
||||
- local: .gitlab-ci.d/templates/test.yml
|
||||
inputs:
|
||||
target: linux-mips64el
|
||||
toolchain: [gnu]
|
||||
qemu_cpu: [Loongson-3A4000]
|
||||
# TODO: Merge up after resolving
|
||||
# https://gitlab.freedesktop.org/pixman/pixman/-/issues/108
|
||||
- local: .gitlab-ci.d/templates/test.yml
|
||||
inputs:
|
||||
target: linux-mips64el
|
||||
toolchain: [llvm]
|
||||
qemu_cpu: [Loongson-3A4000]
|
||||
job_name_prefix: "."
|
||||
job_name_suffix: ":failing"
|
||||
allow_failure: true
|
||||
retry: 0
|
||||
- local: .gitlab-ci.d/templates/test.yml
|
||||
inputs:
|
||||
target: linux-mipsel
|
||||
toolchain: [gnu] # TODO: Add llvm once the build is fixed.
|
||||
qemu_cpu: [74Kf]
|
||||
timeout: 2h
|
||||
- local: .gitlab-ci.d/templates/test.yml
|
||||
inputs:
|
||||
target: linux-ppc
|
||||
qemu_cpu: [g4]
|
||||
job_name_prefix: "."
|
||||
job_name_suffix: ":failing"
|
||||
allow_failure: true # SIGILL for some tests
|
||||
retry: 0
|
||||
- local: .gitlab-ci.d/templates/test.yml
|
||||
inputs:
|
||||
target: linux-ppc64
|
||||
qemu_cpu: [ppc64]
|
||||
job_name_prefix: "."
|
||||
job_name_suffix: ":failing"
|
||||
allow_failure: true # SIGSEGV for some tests
|
||||
retry: 0
|
||||
- local: .gitlab-ci.d/templates/test.yml
|
||||
inputs:
|
||||
target: linux-ppc64le
|
||||
toolchain: [gnu]
|
||||
qemu_cpu: [power10]
|
||||
# TODO: Merge up after resolving
|
||||
# https://gitlab.freedesktop.org/pixman/pixman/-/issues/109
|
||||
- local: .gitlab-ci.d/templates/test.yml
|
||||
inputs:
|
||||
target: linux-ppc64le
|
||||
toolchain: [llvm]
|
||||
qemu_cpu: [power10]
|
||||
job_name_prefix: "."
|
||||
job_name_suffix: ":failing"
|
||||
allow_failure: true
|
||||
retry: 0
|
||||
- local: .gitlab-ci.d/templates/test.yml
|
||||
inputs:
|
||||
target: linux-riscv64
|
||||
qemu_cpu:
|
||||
# Test on target without RVV (verify no autovectorization).
|
||||
- rv64,v=false
|
||||
# Test correctness for different VLENs.
|
||||
- rv64,v=true,vext_spec=v1.0,vlen=128,elen=64
|
||||
- rv64,v=true,vext_spec=v1.0,vlen=256,elen=64
|
||||
- rv64,v=true,vext_spec=v1.0,vlen=512,elen=64
|
||||
- rv64,v=true,vext_spec=v1.0,vlen=1024,elen=64
|
||||
- local: .gitlab-ci.d/templates/test.yml
|
||||
inputs:
|
||||
target: windows-686
|
||||
pixman_disable:
|
||||
# The same as for linux-386.
|
||||
- "sse2 ssse3"
|
||||
- "mmx ssse3"
|
||||
- "mmx sse2"
|
||||
- local: .gitlab-ci.d/templates/test.yml
|
||||
inputs:
|
||||
target: windows-amd64
|
||||
pixman_disable:
|
||||
# The same as for linux-amd64.
|
||||
- ""
|
||||
- "fast"
|
||||
- "wholeops"
|
||||
- local: .gitlab-ci.d/templates/test.yml
|
||||
inputs:
|
||||
target: windows-arm64-v8
|
||||
toolchain: [llvm]
|
||||
qemu_cpu: [max]
|
@ -1,47 +0,0 @@
|
||||
# Summary stage
|
||||
#
|
||||
# This stage takes coverage reports from test runs for all architectures, and
|
||||
# merges it into a single report, with GitLab visualization. There is also an
|
||||
# HTML report generated as a separate artifact.
|
||||
|
||||
summary:
|
||||
extends: .target:all
|
||||
stage: summary
|
||||
variables:
|
||||
TARGET: linux-amd64
|
||||
COVERAGE_SUMMARY_DIR: ${COVERAGE_BASE_DIR}/summary
|
||||
needs:
|
||||
- job: test:linux-386
|
||||
optional: true
|
||||
- job: test:linux-amd64
|
||||
optional: true
|
||||
- job: test:linux-arm-v7
|
||||
optional: true
|
||||
- job: test:linux-arm64-v8
|
||||
optional: true
|
||||
- job: test:linux-mips64el
|
||||
optional: true
|
||||
- job: test:linux-ppc64le
|
||||
optional: true
|
||||
- job: test:linux-riscv64
|
||||
optional: true
|
||||
script:
|
||||
- echo "Input coverage reports:" && ls ${COVERAGE_BASE_DIR}/*.json || (echo "No coverage reports available." && exit)
|
||||
- |
|
||||
args=( )
|
||||
for f in ${COVERAGE_BASE_DIR}/*.json; do
|
||||
args+=( "-a" "$f" )
|
||||
done
|
||||
- mkdir -p ${COVERAGE_SUMMARY_DIR}
|
||||
- gcovr "${args[@]}"
|
||||
--cobertura-pretty --cobertura ${COVERAGE_SUMMARY_DIR}/coverage.xml
|
||||
--html-details ${COVERAGE_SUMMARY_DIR}/coverage.html
|
||||
--txt --print-summary
|
||||
coverage: '/^TOTAL.*\s+(\d+\%)$/'
|
||||
artifacts:
|
||||
reports:
|
||||
coverage_report:
|
||||
coverage_format: cobertura
|
||||
path: ${COVERAGE_SUMMARY_DIR}/coverage.xml
|
||||
paths:
|
||||
- ${COVERAGE_SUMMARY_DIR}/
|
@ -1 +0,0 @@
|
||||
native-gnu.meson
|
@ -1 +0,0 @@
|
||||
native-llvm.meson
|
@ -1 +0,0 @@
|
||||
native-gnu.meson
|
@ -1 +0,0 @@
|
||||
native-llvm.meson
|
@ -1 +0,0 @@
|
||||
native-gnu-noopenmp.meson
|
@ -1 +0,0 @@
|
||||
native-llvm-noopenmp.meson
|
@ -1 +0,0 @@
|
||||
native-gnu.meson
|
@ -1 +0,0 @@
|
||||
native-llvm.meson
|
@ -1 +0,0 @@
|
||||
native-gnu.meson
|
@ -1 +0,0 @@
|
||||
native-llvm.meson
|
@ -1,11 +0,0 @@
|
||||
[binaries]
|
||||
c = ['mips-linux-gnu-gcc', '-DCI_HAS_ALL_MIPS_CPU_FEATURES']
|
||||
ar = 'mips-linux-gnu-ar'
|
||||
strip = 'mips-linux-gnu-strip'
|
||||
exe_wrapper = ['qemu-mips', '-L', '/usr/mips-linux-gnu/']
|
||||
|
||||
[host_machine]
|
||||
system = 'linux'
|
||||
cpu_family = 'mips32'
|
||||
cpu = 'mips32'
|
||||
endian = 'big'
|
@ -1,14 +0,0 @@
|
||||
[binaries]
|
||||
c = ['clang', '-target', 'mips-linux-gnu', '-fPIC', '-DCI_HAS_ALL_MIPS_CPU_FEATURES']
|
||||
ar = 'llvm-ar'
|
||||
strip = 'llvm-strip'
|
||||
exe_wrapper = ['qemu-mips', '-L', '/usr/mips-linux-gnu/']
|
||||
|
||||
[built-in options]
|
||||
c_link_args = ['-target', 'mips-linux-gnu', '-fuse-ld=lld']
|
||||
|
||||
[host_machine]
|
||||
system = 'linux'
|
||||
cpu_family = 'mips32'
|
||||
cpu = 'mips32'
|
||||
endian = 'big'
|
@ -1,8 +0,0 @@
|
||||
[binaries]
|
||||
c = ['gcc', '-DCI_HAS_ALL_MIPS_CPU_FEATURES']
|
||||
ar = 'ar'
|
||||
strip = 'strip'
|
||||
pkg-config = 'pkg-config'
|
||||
|
||||
[project options]
|
||||
mips-dspr2 = 'disabled'
|
@ -1,8 +0,0 @@
|
||||
[binaries]
|
||||
c = ['clang', '-DCI_HAS_ALL_MIPS_CPU_FEATURES']
|
||||
ar = 'llvm-ar'
|
||||
strip = 'llvm-strip'
|
||||
pkg-config = 'pkg-config'
|
||||
|
||||
[project options]
|
||||
mips-dspr2 = 'disabled'
|
@ -1 +0,0 @@
|
||||
native-gnu-noopenmp.meson
|
@ -1 +0,0 @@
|
||||
native-llvm-noopenmp.meson
|
@ -1,11 +0,0 @@
|
||||
[binaries]
|
||||
c = 'powerpc-linux-gnu-gcc'
|
||||
ar = 'powerpc-linux-gnu-ar'
|
||||
strip = 'powerpc-linux-gnu-strip'
|
||||
exe_wrapper = ['qemu-ppc', '-L', '/usr/powerpc-linux-gnu']
|
||||
|
||||
[host_machine]
|
||||
system = 'linux'
|
||||
cpu_family = 'ppc'
|
||||
cpu = 'ppc'
|
||||
endian = 'big'
|
@ -1,15 +0,0 @@
|
||||
[binaries]
|
||||
c = ['clang', '-target', 'powerpc-linux-gnu']
|
||||
ar = 'llvm-ar'
|
||||
strip = 'llvm-strip'
|
||||
exe_wrapper = ['qemu-ppc', '-L', '/usr/powerpc-linux-gnu/']
|
||||
|
||||
[built-in options]
|
||||
# We cannot use LLD, as it doesn't support big-endian PPC.
|
||||
c_link_args = ['-target', 'powerpc-linux-gnu']
|
||||
|
||||
[host_machine]
|
||||
system = 'linux'
|
||||
cpu_family = 'ppc'
|
||||
cpu = 'ppc'
|
||||
endian = 'big'
|
@ -1,11 +0,0 @@
|
||||
[binaries]
|
||||
c = 'powerpc64-linux-gnu-gcc'
|
||||
ar = 'powerpc64-linux-gnu-ar'
|
||||
strip = 'powerpc64-linux-gnu-strip'
|
||||
exe_wrapper = ['qemu-ppc64', '-L', '/usr/powerpc64-linux-gnu/']
|
||||
|
||||
[host_machine]
|
||||
system = 'linux'
|
||||
cpu_family = 'ppc64'
|
||||
cpu = 'ppc64'
|
||||
endian = 'big'
|
@ -1,15 +0,0 @@
|
||||
[binaries]
|
||||
c = ['clang', '-target', 'powerpc64-linux-gnu']
|
||||
ar = 'llvm-ar'
|
||||
strip = 'llvm-strip'
|
||||
exe_wrapper = ['qemu-ppc64', '-L', '/usr/powerpc64-linux-gnu/']
|
||||
|
||||
[built-in options]
|
||||
# We cannot use LLD, as it doesn't support big-endian PPC.
|
||||
c_link_args = ['-target', 'powerpc64-linux-gnu']
|
||||
|
||||
[host_machine]
|
||||
system = 'linux'
|
||||
cpu_family = 'ppc64'
|
||||
cpu = 'ppc64'
|
||||
endian = 'big'
|
@ -1 +0,0 @@
|
||||
native-gnu.meson
|
@ -1 +0,0 @@
|
||||
native-llvm.meson
|
@ -1 +0,0 @@
|
||||
native-gnu.meson
|
@ -1 +0,0 @@
|
||||
native-llvm.meson
|
@ -1,8 +0,0 @@
|
||||
[binaries]
|
||||
c = ['gcc', '-DCI_HAS_ALL_MIPS_CPU_FEATURES']
|
||||
ar = 'ar'
|
||||
strip = 'strip'
|
||||
pkg-config = 'pkg-config'
|
||||
|
||||
[project options]
|
||||
openmp = 'disabled'
|
@ -1,5 +0,0 @@
|
||||
[binaries]
|
||||
c = 'gcc'
|
||||
ar = 'ar'
|
||||
strip = 'strip'
|
||||
pkg-config = 'pkg-config'
|
@ -1,8 +0,0 @@
|
||||
[binaries]
|
||||
c = ['clang', '-DCI_HAS_ALL_MIPS_CPU_FEATURES']
|
||||
ar = 'llvm-ar'
|
||||
strip = 'llvm-strip'
|
||||
pkg-config = 'pkg-config'
|
||||
|
||||
[project options]
|
||||
openmp = 'disabled'
|
@ -1,5 +0,0 @@
|
||||
[binaries]
|
||||
c = 'clang'
|
||||
ar = 'llvm-ar'
|
||||
strip = 'llvm-strip'
|
||||
pkg-config = 'pkg-config'
|
@ -1,18 +0,0 @@
|
||||
[binaries]
|
||||
c = 'i686-w64-mingw32-gcc'
|
||||
ar = 'i686-w64-mingw32-ar'
|
||||
strip = 'i686-w64-mingw32-strip'
|
||||
windres = 'i686-w64-mingw32-windres'
|
||||
exe_wrapper = 'wine'
|
||||
|
||||
[built-in options]
|
||||
c_link_args = ['-static-libgcc']
|
||||
|
||||
[host_machine]
|
||||
system = 'windows'
|
||||
cpu_family = 'x86'
|
||||
cpu = 'i686'
|
||||
endian = 'little'
|
||||
|
||||
[project options]
|
||||
openmp = 'disabled'
|
@ -1,18 +0,0 @@
|
||||
[binaries]
|
||||
c = 'i686-w64-mingw32-clang'
|
||||
ar = 'i686-w64-mingw32-llvm-ar'
|
||||
strip = 'i686-w64-mingw32-strip'
|
||||
windres = 'i686-w64-mingw32-windres'
|
||||
exe_wrapper = 'wine'
|
||||
|
||||
[built-in options]
|
||||
c_link_args = ['-static']
|
||||
|
||||
[project options]
|
||||
openmp = 'disabled'
|
||||
|
||||
[host_machine]
|
||||
system = 'windows'
|
||||
cpu_family = 'x86'
|
||||
cpu = 'i686'
|
||||
endian = 'little'
|
@ -1,15 +0,0 @@
|
||||
[binaries]
|
||||
c = 'x86_64-w64-mingw32-gcc'
|
||||
ar = 'x86_64-w64-mingw32-ar'
|
||||
strip = 'x86_64-w64-mingw32-strip'
|
||||
windres = 'x86_64-w64-mingw32-windres'
|
||||
exe_wrapper = 'wine'
|
||||
|
||||
[built-in options]
|
||||
c_link_args = ['-static-libgcc']
|
||||
|
||||
[host_machine]
|
||||
system = 'windows'
|
||||
cpu_family = 'x86_64'
|
||||
cpu = 'x86_64'
|
||||
endian = 'little'
|
@ -1,20 +0,0 @@
|
||||
[binaries]
|
||||
c = 'x86_64-w64-mingw32-clang'
|
||||
ar = 'x86_64-w64-mingw32-llvm-ar'
|
||||
strip = 'x86_64-w64-mingw32-strip'
|
||||
windres = 'x86_64-w64-mingw32-windres'
|
||||
exe_wrapper = 'wine'
|
||||
|
||||
[built-in options]
|
||||
# Static linking is a workaround around `libwinpthread-1` not being discovered correctly.
|
||||
c_link_args = ['-static']
|
||||
|
||||
[project options]
|
||||
# OpenMP is disabled as it is not being discovered correctly during tests.
|
||||
openmp = 'disabled'
|
||||
|
||||
[host_machine]
|
||||
system = 'windows'
|
||||
cpu_family = 'x86_64'
|
||||
cpu = 'x86_64'
|
||||
endian = 'little'
|
@ -1,18 +0,0 @@
|
||||
[binaries]
|
||||
c = 'aarch64-w64-mingw32-clang'
|
||||
ar = 'aarch64-w64-mingw32-llvm-ar'
|
||||
strip = 'aarch64-w64-mingw32-strip'
|
||||
windres = 'aarch64-w64-mingw32-windres'
|
||||
exe_wrapper = 'wine-arm64'
|
||||
|
||||
[built-in options]
|
||||
c_link_args = ['-static']
|
||||
|
||||
[project options]
|
||||
openmp = 'disabled'
|
||||
|
||||
[host_machine]
|
||||
system = 'windows'
|
||||
cpu_family = 'aarch64'
|
||||
cpu = 'aarch64'
|
||||
endian = 'little'
|
@ -1,65 +0,0 @@
|
||||
# This file contains the set of jobs run by the pixman project:
|
||||
# https://gitlab.freedesktop.org/pixman/pixman/-/pipelines
|
||||
|
||||
stages:
|
||||
- docker
|
||||
- build
|
||||
- test
|
||||
- summary
|
||||
|
||||
variables:
|
||||
# Make it possible to change RUNNER_TAG from GitLab variables. The default
|
||||
# `kvm` tag has been tested with FDO infrastructure.
|
||||
RUNNER_TAG: kvm
|
||||
|
||||
# Docker image global configuration.
|
||||
DOCKER_TAG: latest
|
||||
DOCKER_IMAGE_NAME: registry.freedesktop.org/pixman/pixman/pixman:${DOCKER_TAG}
|
||||
|
||||
# Execute to load a target-specific environment.
|
||||
LOAD_TARGET_ENV: source .gitlab-ci.d/01-docker/target-env/${TARGET}.env
|
||||
|
||||
# Enable/disable specific targets for code and platform coverage targets.
|
||||
ACTIVE_TARGET_PATTERN: '/linux-386|linux-amd64|linux-arm-v5|linux-arm-v7|linux-arm64-v8|linux-mips|linux-mips64el|linux-mipsel|linux-ppc|linux-ppc64|linux-ppc64le|linux-riscv64|windows-686|windows-amd64|windows-arm64-v8/i'
|
||||
|
||||
workflow:
|
||||
rules:
|
||||
# Use modified Docker image if building in MR and Docker image is affected
|
||||
# by the MR.
|
||||
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
|
||||
changes:
|
||||
paths:
|
||||
- .gitlab-ci.d/01-docker.yml
|
||||
- .gitlab-ci.d/01-docker/**/*
|
||||
variables:
|
||||
DOCKER_TAG: $CI_COMMIT_REF_SLUG
|
||||
DOCKER_IMAGE_NAME: ${CI_REGISTRY_IMAGE}/pixman:${DOCKER_TAG}
|
||||
|
||||
# A standard set of GitLab CI triggers (i.e., MR, schedule, default branch,
|
||||
# and tag).
|
||||
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
|
||||
- if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS
|
||||
when: never
|
||||
- if: $CI_PIPELINE_SOURCE == 'schedule'
|
||||
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
||||
- if: $CI_COMMIT_BRANCH
|
||||
- if: $CI_COMMIT_TAG
|
||||
|
||||
auto_cancel:
|
||||
on_new_commit: conservative
|
||||
on_job_failure: all
|
||||
|
||||
default:
|
||||
tags:
|
||||
- $RUNNER_TAG
|
||||
|
||||
# Retry in case the runner is misconfigured for multi-arch builds or some
|
||||
# random unexpected runner error occurs (it happened during testing).
|
||||
retry: 1
|
||||
|
||||
include:
|
||||
- local: "/.gitlab-ci.d/templates/targets.yml"
|
||||
- local: "/.gitlab-ci.d/01-docker.yml"
|
||||
- local: "/.gitlab-ci.d/02-build.yml"
|
||||
- local: "/.gitlab-ci.d/03-test.yml"
|
||||
- local: "/.gitlab-ci.d/04-summary.yml"
|
@ -1,80 +0,0 @@
|
||||
spec:
|
||||
inputs:
|
||||
target:
|
||||
description:
|
||||
Build target in form of "OS-ARCH" pair (e.g., linux-amd64). Mostly the
|
||||
same as platform string for Docker but with a hyphen instead of slash.
|
||||
toolchain:
|
||||
description:
|
||||
An array of toolchains to test with. Each toolchain should have an
|
||||
appropriate Meson cross file.
|
||||
type: array
|
||||
default: [gnu, llvm]
|
||||
qemu_cpu:
|
||||
description:
|
||||
QEMU_CPU environmental variable used by Docker (which uses QEMU
|
||||
underneath). It is not used by x86 targets, as they are executed
|
||||
natively on the host.
|
||||
default: ""
|
||||
enable_gnu_coverage:
|
||||
description:
|
||||
Enable coverage build flags. It can be later used to compile a coverage
|
||||
report for all the jobs. Should be enabled only for native build
|
||||
environments as they have all the optional dependencies, and are the
|
||||
most reliable and uniform (so disable for cross environments).
|
||||
type: boolean
|
||||
default: true
|
||||
job_name_prefix:
|
||||
description:
|
||||
Additional prefix for the job name. Can be used to disable a job with a
|
||||
"." prefix.
|
||||
default: ""
|
||||
job_name_suffix:
|
||||
description:
|
||||
Additional suffix for the job name. Can be used to prevent job
|
||||
duplication for jobs for the same target.
|
||||
default: ""
|
||||
allow_failure:
|
||||
description:
|
||||
Set the `allow_failure` flag for jobs that are expected to fail.
|
||||
Remember to set `retry` argument to 0 to prevent unnecessary retries.
|
||||
type: boolean
|
||||
default: false
|
||||
retry:
|
||||
description:
|
||||
Set the `retry` flag for a job. Usually used together with
|
||||
`allow_failure`.
|
||||
type: number
|
||||
default: 1
|
||||
---
|
||||
|
||||
"$[[ inputs.job_name_prefix ]]build:$[[ inputs.target ]]$[[ inputs.job_name_suffix ]]":
|
||||
extends: .target:all
|
||||
stage: build
|
||||
allow_failure: $[[ inputs.allow_failure ]]
|
||||
retry: $[[ inputs.retry ]]
|
||||
needs:
|
||||
- job: docker
|
||||
optional: true
|
||||
parallel:
|
||||
matrix:
|
||||
- TARGET: $[[ inputs.target ]]
|
||||
variables:
|
||||
TARGET: $[[ inputs.target ]]
|
||||
QEMU_CPU: $[[ inputs.qemu_cpu ]]
|
||||
parallel:
|
||||
matrix:
|
||||
- TOOLCHAIN: $[[ inputs.toolchain ]]
|
||||
script:
|
||||
- |
|
||||
if [ "$[[ inputs.enable_gnu_coverage ]]" == "true" ] && [ "${TOOLCHAIN}" == "gnu" ]; then
|
||||
COV_C_ARGS=-fprofile-update=atomic
|
||||
COV_MESON_BUILD_ARGS=-Db_coverage=true
|
||||
fi
|
||||
- meson setup ${BUILD_DIR}
|
||||
--cross-file .gitlab-ci.d/meson-cross/${TARGET}-${TOOLCHAIN}.meson
|
||||
-Dc_args="${COV_C_ARGS}" ${COV_MESON_BUILD_ARGS}
|
||||
- meson compile -C ${BUILD_DIR}
|
||||
artifacts:
|
||||
paths:
|
||||
- ${BUILD_DIR}/
|
@ -1,9 +0,0 @@
|
||||
# General target templates.
|
||||
|
||||
.target:all:
|
||||
image:
|
||||
name: $DOCKER_IMAGE_NAME-$TARGET
|
||||
rules:
|
||||
- if: "$TARGET =~ $ACTIVE_TARGET_PATTERN"
|
||||
before_script:
|
||||
- ${LOAD_TARGET_ENV}
|
@ -1,112 +0,0 @@
|
||||
spec:
|
||||
inputs:
|
||||
target:
|
||||
description:
|
||||
Build target in form of "OS-ARCH" pair (e.g., linux-amd64). Mostly the
|
||||
same as platform string for Docker but with a hyphen instead of slash.
|
||||
toolchain:
|
||||
description:
|
||||
An array of toolchains to test with. Each toolchain should have an
|
||||
appropriate Meson cross file.
|
||||
type: array
|
||||
default: [gnu, llvm]
|
||||
qemu_cpu:
|
||||
description:
|
||||
An array of QEMU_CPU environmental variables used as a job matrix
|
||||
variable, and in turn by Docker (which uses QEMU underneath). It is not
|
||||
used by x86 targets, as they are executed natively on the host.
|
||||
type: array
|
||||
default: [""]
|
||||
pixman_disable:
|
||||
description:
|
||||
An array of PIXMAN_DISABLE targets used as a job matrix variable.
|
||||
type: array
|
||||
default: [""]
|
||||
timeout:
|
||||
description:
|
||||
GitLab job timeout property. May need to be increased for slow
|
||||
targets.
|
||||
default: 1h
|
||||
test_timeout_multiplier:
|
||||
description:
|
||||
Test timeout multiplier flag used for Meson test execution. May need to
|
||||
be increased for slow targets.
|
||||
type: number
|
||||
default: 20
|
||||
meson_testthreads:
|
||||
description:
|
||||
Sets MESON_TESTTHREADS environmental variable. For some platforms, the
|
||||
tests should be executed one by one (without multithreading) to prevent
|
||||
gcovr errors.
|
||||
type: number
|
||||
default: 0
|
||||
gcovr_flags:
|
||||
description:
|
||||
Additional flags passed to gcovr tool.
|
||||
default: ""
|
||||
job_name_prefix:
|
||||
description:
|
||||
Additional prefix for the job name. Can be used to disable a job with a
|
||||
"." prefix.
|
||||
default: ""
|
||||
job_name_suffix:
|
||||
description:
|
||||
Additional suffix for the job name. Can be used to prevent job
|
||||
duplication for jobs for the same target.
|
||||
default: ""
|
||||
allow_failure:
|
||||
description:
|
||||
Set the `allow_failure` flag for jobs that are expected to fail.
|
||||
Remember to set `retry` argument to 0 to prevent unnecessary retries.
|
||||
type: boolean
|
||||
default: false
|
||||
retry:
|
||||
description:
|
||||
Set the `retry` flag for a job. Usually used together with
|
||||
`allow_failure`.
|
||||
type: number
|
||||
default: 1
|
||||
---
|
||||
|
||||
"$[[ inputs.job_name_prefix ]]test:$[[ inputs.target ]]$[[ inputs.job_name_suffix ]]":
|
||||
extends: .target:all
|
||||
stage: test
|
||||
allow_failure: $[[ inputs.allow_failure ]]
|
||||
retry: $[[ inputs.retry ]]
|
||||
timeout: $[[ inputs.timeout ]]
|
||||
needs:
|
||||
- job: docker
|
||||
optional: true
|
||||
parallel:
|
||||
matrix:
|
||||
- TARGET: $[[ inputs.target ]]
|
||||
- job: build:$[[ inputs.target ]]
|
||||
parallel:
|
||||
matrix:
|
||||
- TOOLCHAIN: $[[ inputs.toolchain ]]
|
||||
variables:
|
||||
TARGET: $[[ inputs.target ]]
|
||||
TEST_TIMEOUT_MULTIPLIER: $[[ inputs.test_timeout_multiplier ]]
|
||||
GCOVR_FLAGS: $[[ inputs.gcovr_flags ]]
|
||||
MESON_ARGS: -t ${TEST_TIMEOUT_MULTIPLIER} --no-rebuild -v ${TEST_NAME}
|
||||
MESON_TESTTHREADS: $[[ inputs.meson_testthreads ]]
|
||||
parallel:
|
||||
matrix:
|
||||
- TOOLCHAIN: $[[ inputs.toolchain ]]
|
||||
PIXMAN_DISABLE: $[[ inputs.pixman_disable ]]
|
||||
QEMU_CPU: $[[ inputs.qemu_cpu ]]
|
||||
script:
|
||||
- meson test -C ${BUILD_DIR} ${MESON_ARGS}
|
||||
after_script:
|
||||
- mkdir -p ${COVERAGE_OUT}
|
||||
- gcovr ${GCOVR_FLAGS} -r ./ ${BUILD_DIR} -e ./subprojects
|
||||
--json ${COVERAGE_OUT}.json
|
||||
--html-details ${COVERAGE_OUT}/coverage.html
|
||||
--print-summary || echo "No coverage data available."
|
||||
artifacts:
|
||||
paths:
|
||||
- ${BUILD_DIR}/meson-logs/testlog.txt
|
||||
- ${COVERAGE_BASE_DIR}/
|
||||
reports:
|
||||
junit:
|
||||
- ${BUILD_DIR}/meson-logs/testlog.junit.xml
|
@ -1,16 +0,0 @@
|
||||
#
|
||||
# This is the GitLab CI configuration file for the mainstream pixman project:
|
||||
# https://gitlab.freedesktop.org/pixman/pixman/-/pipelines
|
||||
#
|
||||
# !!! DO NOT ADD ANY NEW CONFIGURATION TO THIS FILE !!!
|
||||
#
|
||||
# Only documentation or comments is accepted.
|
||||
#
|
||||
# To use a different set of jobs than the mainstream project, you need to set
|
||||
# the location of your custom yml file at "custom CI/CD configuration path", on
|
||||
# your GitLab CI namespace:
|
||||
# https://docs.gitlab.com/ee/ci/pipelines/settings.html#custom-cicd-configuration-path
|
||||
#
|
||||
|
||||
include:
|
||||
- local: '/.gitlab-ci.d/pixman-project.yml'
|
199
CODING_STYLE
199
CODING_STYLE
@ -1,199 +0,0 @@
|
||||
Pixman coding style.
|
||||
====================
|
||||
|
||||
The pixman coding style is close to cairo's with one exception: braces
|
||||
go on their own line, rather than on the line of the if/while/for:
|
||||
|
||||
if (condition)
|
||||
{
|
||||
do_something();
|
||||
do_something_else();
|
||||
}
|
||||
|
||||
not
|
||||
|
||||
if (condition) {
|
||||
do_something();
|
||||
do_something_else();
|
||||
}
|
||||
|
||||
|
||||
|
||||
Indentation
|
||||
===========
|
||||
|
||||
Each new level is indented four spaces:
|
||||
|
||||
if (condition)
|
||||
do_something();
|
||||
|
||||
This may be achieved with space characters or with a combination of
|
||||
tab characters and space characters. Tab characters are interpreted as
|
||||
|
||||
Advance to the next column which is a multiple of 8.
|
||||
|
||||
|
||||
Names
|
||||
=====
|
||||
|
||||
In all names, words are separated with underscores. Do not use
|
||||
CamelCase for any names.
|
||||
|
||||
Macros have ALL_CAPITAL_NAMES
|
||||
|
||||
Type names are in lower case and end with "_t". For example
|
||||
pixman_image_t.
|
||||
|
||||
Labels, functions and variables have lower case names.
|
||||
|
||||
|
||||
Braces
|
||||
======
|
||||
|
||||
Braces always go on their own line:
|
||||
|
||||
if (condition)
|
||||
{
|
||||
do_this ();
|
||||
do_that ();
|
||||
}
|
||||
else
|
||||
{
|
||||
do_the_other ();
|
||||
}
|
||||
|
||||
Rules for braces and substatements of if/while/for/do:
|
||||
|
||||
* If a substatement spans multiple lines, then there must be braces
|
||||
around it.
|
||||
|
||||
* If the condition of an if/while/for spans multiple lines, then
|
||||
braces must be used for the substatements.
|
||||
|
||||
* If one substatement of an if statement has braces, then the other
|
||||
must too.
|
||||
|
||||
* Otherwise, don't add braces.
|
||||
|
||||
|
||||
Comments
|
||||
========
|
||||
|
||||
For comments either like this:
|
||||
|
||||
/* One line comment */
|
||||
|
||||
or like this:
|
||||
|
||||
/* This is a multi-line comment
|
||||
*
|
||||
* It extends over multiple lines
|
||||
*/
|
||||
|
||||
Generally comments should say things that aren't clear from the code
|
||||
itself. If too many comments say obvious things, then people will just
|
||||
stop reading all comments, including the good ones.
|
||||
|
||||
|
||||
Whitespace
|
||||
==========
|
||||
|
||||
* Put a single space after commas
|
||||
|
||||
* Put spaces around arithmetic operators such a +, -, *, /:
|
||||
|
||||
y * stride + x
|
||||
|
||||
x / unit_x
|
||||
|
||||
* Do not put spaces after the address-of operator, the * when used as
|
||||
a pointer derefernce or the ! and ~ operators:
|
||||
|
||||
&foo;
|
||||
|
||||
~0x00000000
|
||||
|
||||
!condition
|
||||
|
||||
*result = 100
|
||||
|
||||
* Break up long lines (> ~80 characters) and use whitespace to align
|
||||
things nicely. This is one way:
|
||||
|
||||
some_very_long_function name (
|
||||
implementation, op, src, mask, dest,
|
||||
src_x, src_y, mask_x, mask_y, dest_x, dest_y,
|
||||
width, height);
|
||||
|
||||
This is another:
|
||||
|
||||
some_very_long_function_name (implementation, op,
|
||||
src, mask, dest,
|
||||
src_x, src_y,
|
||||
mask_x, mask_y,
|
||||
dest_x, dest_y,
|
||||
width, height);
|
||||
|
||||
* Separate logically distinct chunks with a single newline. This
|
||||
obviously applies between functions, but also applies within a
|
||||
function or block or structure definition.
|
||||
|
||||
* Use a newline after a block of variable declarations.
|
||||
|
||||
* Use a single space before a left parenthesis, except where the
|
||||
standard will not allow it, (eg. when defining a parameterized macro).
|
||||
|
||||
* Don't eliminate newlines just because things would still fit on one
|
||||
line. This breaks the expected visual structure of the code making
|
||||
it much harder to read and understand:
|
||||
|
||||
if (condition) foo (); else bar (); /* Yuck! */
|
||||
|
||||
|
||||
Function Definitions
|
||||
====================
|
||||
|
||||
Function definitions should take the following form:
|
||||
|
||||
void
|
||||
my_function (int argument)
|
||||
{
|
||||
do_my_things ();
|
||||
}
|
||||
|
||||
If all the parameters to a function fit naturally on one line, format
|
||||
them that way. Otherwise, put one argument on each line, adding
|
||||
whitespace so that the parameter names are aligned with each other.
|
||||
|
||||
I.e., do either this:
|
||||
|
||||
void
|
||||
short_arguments (const char *str, int x, int y, int z)
|
||||
{
|
||||
}
|
||||
|
||||
or this:
|
||||
|
||||
void
|
||||
long_arguments (const char *char_star_arg,
|
||||
int int_arg,
|
||||
double *double_star_arg,
|
||||
double double_arg)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
Mode lines
|
||||
==========
|
||||
|
||||
Given the rules above, what is the best way to simplify one's life as
|
||||
a code monkey? Get your editor to do most of the tedious work of
|
||||
beautifying your code!
|
||||
|
||||
As a reward for reading this far, here are some mode lines for the more
|
||||
popular editors:
|
||||
/*
|
||||
* vim:sw=4:sts=4:ts=8:tw=78:fo=tcroq:cindent:cino=\:0,(0
|
||||
* vim:isk=a-z,A-Z,48-57,_,.,-,>
|
||||
*/
|
||||
|
42
COPYING
42
COPYING
@ -1,42 +0,0 @@
|
||||
The following is the MIT license, agreed upon by most contributors.
|
||||
Copyright holders of new code should use this license statement where
|
||||
possible. They may also add themselves to the list below.
|
||||
|
||||
/*
|
||||
* Copyright 1987, 1988, 1989, 1998 The Open Group
|
||||
* Copyright 1987, 1988, 1989 Digital Equipment Corporation
|
||||
* Copyright 1999, 2004, 2008 Keith Packard
|
||||
* Copyright 2000 SuSE, Inc.
|
||||
* Copyright 2000 Keith Packard, member of The XFree86 Project, Inc.
|
||||
* Copyright 2004, 2005, 2007, 2008, 2009, 2010 Red Hat, Inc.
|
||||
* Copyright 2004 Nicholas Miell
|
||||
* Copyright 2005 Lars Knoll & Zack Rusin, Trolltech
|
||||
* Copyright 2005 Trolltech AS
|
||||
* Copyright 2007 Luca Barbato
|
||||
* Copyright 2008 Aaron Plattner, NVIDIA Corporation
|
||||
* Copyright 2008 Rodrigo Kumpera
|
||||
* Copyright 2008 André Tupinambá
|
||||
* Copyright 2008 Mozilla Corporation
|
||||
* Copyright 2008 Frederic Plourde
|
||||
* Copyright 2009, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright 2009, 2010 Nokia Corporation
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the next
|
||||
* paragraph) shall be included in all copies or substantial portions of the
|
||||
* Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*/
|
127
Makefile.am
Normal file
127
Makefile.am
Normal file
@ -0,0 +1,127 @@
|
||||
SUBDIRS = pixman test
|
||||
|
||||
pkgconfigdir=$(libdir)/pkgconfig
|
||||
pkgconfig_DATA=pixman-1.pc
|
||||
|
||||
$(pkgconfig_DATA): pixman-1.pc.in
|
||||
|
||||
snapshot:
|
||||
distdir="$(distdir)-`date '+%Y%m%d'`"; \
|
||||
test -d "$(srcdir)/.git" && distdir=$$distdir-`cd "$(srcdir)" && git-rev-parse HEAD | cut -c 1-6`; \
|
||||
$(MAKE) $(AM_MAKEFLAGS) distdir="$$distdir" dist
|
||||
|
||||
USERNAME=$$USER
|
||||
RELEASE_OR_SNAPSHOT = $$(if test "x$(CAIRO_VERSION_MINOR)" = "x$$(echo "$(CAIRO_VERSION_MINOR)/2*2" | bc)" ; then echo release; else echo snapshot; fi)
|
||||
RELEASE_CAIRO_HOST = $(USERNAME)@cairographics.org
|
||||
RELEASE_CAIRO_DIR = /srv/cairo.freedesktop.org/www/releases
|
||||
RELEASE_CAIRO_URL = http://cairographics.org/releases
|
||||
RELEASE_XORG_URL = http://xorg.freedesktop.org/archive/individual/lib
|
||||
RELEASE_XORG_HOST = $(USERNAME)@xorg.freedesktop.org
|
||||
RELEASE_XORG_DIR = /srv/xorg.freedesktop.org/archive/individual/lib
|
||||
RELEASE_ANNOUNCE_LIST = cairo-announce@cairographics.org, xorg-announce@lists.freedesktop.org
|
||||
|
||||
tar_gz = $(PACKAGE)-$(VERSION).tar.gz
|
||||
tar_bz2 = $(PACKAGE)-$(VERSION).tar.bz2
|
||||
|
||||
sha1_tgz = $(tar_gz).sha1
|
||||
md5_tgz = $(tar_gz).md5
|
||||
|
||||
sha1_tbz2 = $(tar_bz2).sha1
|
||||
md5_tbz2 = $(tar_bz2).md5
|
||||
|
||||
gpg_file = $(sha1_tgz).asc
|
||||
|
||||
$(sha1_tgz): $(tar_gz)
|
||||
sha1sum $^ > $@
|
||||
|
||||
$(md5_tgz): $(tar_gz)
|
||||
md5sum $^ > $@
|
||||
|
||||
$(sha1_tbz2): $(tar_bz2)
|
||||
sha1sum $^ > $@
|
||||
|
||||
$(md5_tbz2): $(tar_bz2)
|
||||
md5sum $^ > $@
|
||||
|
||||
$(gpg_file): $(sha1_tgz)
|
||||
@echo "Please enter your GPG password to sign the checksum."
|
||||
gpg --armor --sign $^
|
||||
|
||||
release-verify-newer:
|
||||
@echo -n "Checking that no $(VERSION) release already exists at $(RELEASE_XORG_HOST)..."
|
||||
@ssh $(RELEASE_XORG_HOST) test ! -e $(RELEASE_XORG_DIR)/$(tar_gz) \
|
||||
|| (echo "Ouch." && echo "Found: $(RELEASE_XORG_HOST):$(RELEASE_XORG_DIR)/$(tar_gz)" \
|
||||
&& echo "Refusing to try to generate a new release of the same name." \
|
||||
&& false)
|
||||
@ssh $(RELEASE_CAIRO_HOST) test ! -e $(RELEASE_CAIRO_DIR)/$(tar_gz) \
|
||||
|| (echo "Ouch." && echo "Found: $(RELEASE_CAIRO_HOST):$(RELEASE_CAIRO_DIR)/$(tar_gz)" \
|
||||
&& echo "Refusing to try to generate a new release of the same name." \
|
||||
&& false)
|
||||
@echo "Good."
|
||||
|
||||
release-remove-old:
|
||||
$(RM) $(tar_gz) $(tar_bz2) $(sha1_tgz) $(gpg_file)
|
||||
|
||||
ensure-prev:
|
||||
@if [[ "$(PREV)" == "" ]]; then \
|
||||
echo "" && \
|
||||
echo "You must set the PREV variable on the make command line to" && \
|
||||
echo "the git tag of the last release." && \
|
||||
echo "" && \
|
||||
echo "For example:" && \
|
||||
echo " make PREV=pixman-0.7.3" && \
|
||||
echo "" && \
|
||||
false; \
|
||||
fi
|
||||
|
||||
release-check: ensure-prev release-verify-newer release-remove-old distcheck
|
||||
|
||||
release-upload: release-check $(tar_gz) $(tar_bz2) $(sha1_tgz) $(gpg_file)
|
||||
mkdir -p releases
|
||||
scp $(tar_gz) $(sha1_tgz) $(gpg_file) $(RELEASE_CAIRO_HOST):$(RELEASE_CAIRO_DIR)
|
||||
scp $(tar_gz) $(tar_bz2) $(RELEASE_XORG_HOST):$(RELEASE_XORG_DIR)
|
||||
ssh $(RELEASE_CAIRO_HOST) "rm -f $(RELEASE_CAIRO_DIR)/LATEST-$(PACKAGE)-[0-9]* && ln -s $(tar_gz) $(RELEASE_CAIRO_DIR)/LATEST-$(PACKAGE)-$(VERSION)"
|
||||
git-tag -s -m "$(PACKAGE) $(VERSION) release" $(PACKAGE)-$(VERSION)
|
||||
|
||||
release-publish-message: $(sha1_tgz) $(md5_tgz) $(sha1_tbz2) $(md5_tbz2) ensure-prev
|
||||
@echo "Please follow the instructions in RELEASING to push stuff out and"
|
||||
@echo "send out the announcement mails. Here is the excerpt you need:"
|
||||
@echo ""
|
||||
@echo "Lists: $(RELEASE_ANNOUNCE_LIST)"
|
||||
@echo "Subject: [ANNOUNCE] $(PACKAGE) release $(VERSION) now available"
|
||||
@echo "============================== CUT HERE =============================="
|
||||
@echo "A new $(PACKAGE) release $(VERSION) is now available"
|
||||
@echo ""
|
||||
@echo "tar.gz:"
|
||||
@echo " $(RELEASE_CAIRO_URL)/$(tar_gz)"
|
||||
@echo " $(RELEASE_XORG_URL)/$(tar_gz)"
|
||||
@echo ""
|
||||
@echo "tar.bz2:"
|
||||
@echo " $(RELEASE_XORG_URL)/$(tar_bz2)"
|
||||
@echo ""
|
||||
@echo "Hashes:"
|
||||
@echo -n " MD5: "
|
||||
@cat $(md5_tgz)
|
||||
@echo -n " MD5: "
|
||||
@cat $(md5_tbz2)
|
||||
@echo -n " SHA1: "
|
||||
@cat $(sha1_tgz)
|
||||
@echo -n " SHA1: "
|
||||
@cat $(sha1_tbz2)
|
||||
@echo ""
|
||||
@echo "GPG signature:"
|
||||
@echo " $(RELEASE_CAIRO_URL)/$(gpg_file)"
|
||||
@echo " (signed by `getent passwd "$$USER" | cut -d: -f 5 | cut -d, -f 1`)"
|
||||
@echo ""
|
||||
@echo "Git:"
|
||||
@echo " git://git.freedesktop.org/git/pixman"
|
||||
@echo " tag: $(PACKAGE)-$(VERSION)"
|
||||
@echo ""
|
||||
@echo "Log:"
|
||||
@git-log --no-merges "$(PACKAGE)-$(PREV)".."$(PACKAGE)-$(VERSION)" | git shortlog | awk '{ printf "\t"; print ; }' | cut -b1-80
|
||||
@echo "============================== CUT HERE =============================="
|
||||
@echo ""
|
||||
|
||||
release-publish: release-upload release-publish-message
|
||||
|
||||
.PHONY: release-upload release-publish release-publish-message
|
134
README
134
README
@ -1,134 +1,26 @@
|
||||
Pixman
|
||||
======
|
||||
|
||||
Pixman is a library that provides low-level pixel manipulation
|
||||
pixman is a library that provides low-level pixel manipulation
|
||||
features such as image compositing and trapezoid rasterization.
|
||||
|
||||
Questions should be directed to the pixman mailing list:
|
||||
Please submit bugs & patches to the libpixman bugzilla:
|
||||
|
||||
https://lists.freedesktop.org/mailman/listinfo/pixman
|
||||
https://bugs.freedesktop.org/enter_bug.cgi?product=libpixman
|
||||
|
||||
You can also file bugs at
|
||||
All questions regarding this software should be directed to either the
|
||||
Xorg mailing list:
|
||||
|
||||
https://gitlab.freedesktop.org/pixman/pixman/-/issues/new
|
||||
http://lists.freedesktop.org/mailman/listinfo/xorg
|
||||
|
||||
or submit improvements in form of a Merge Request via
|
||||
or the cairo mailing list:
|
||||
|
||||
https://gitlab.freedesktop.org/pixman/pixman/-/merge_requests
|
||||
http://lists.freedesktop.org/mailman/listinfo/cairo
|
||||
|
||||
For real time discussions about pixman, feel free to join the IRC
|
||||
channels #cairo and #xorg-devel on the FreeNode IRC network.
|
||||
The master development code repository can be found at:
|
||||
|
||||
git://anongit.freedesktop.org/git/pixman
|
||||
|
||||
Contributing
|
||||
------------
|
||||
http://gitweb.freedesktop.org/?p=pixman;a=summary
|
||||
|
||||
In order to contribute to pixman, you will need a working knowledge of
|
||||
the git version control system. For a quick getting started guide,
|
||||
there is the "Everyday Git With 20 Commands Or So guide"
|
||||
For more information on the git code manager, see:
|
||||
|
||||
https://www.kernel.org/pub/software/scm/git/docs/everyday.html
|
||||
http://wiki.x.org/wiki/GitPage
|
||||
|
||||
from the Git homepage. For more in depth git documentation, see the
|
||||
resources on the Git community documentation page:
|
||||
|
||||
https://git-scm.com/documentation
|
||||
|
||||
Pixman uses the infrastructure from the freedesktop.org umbrella
|
||||
project. For instructions about how to use the git service on
|
||||
freedesktop.org, see:
|
||||
|
||||
https://www.freedesktop.org/wiki/Infrastructure/git/Developers
|
||||
|
||||
The Pixman master repository can be found at:
|
||||
|
||||
https://gitlab.freedesktop.org/pixman/pixman
|
||||
|
||||
|
||||
Sending patches
|
||||
---------------
|
||||
|
||||
Patches should be submitted in form of Merge Requests via Gitlab.
|
||||
|
||||
You will first need to create a fork of the main pixman repository at
|
||||
|
||||
https://gitlab.freedesktop.org/pixman/pixman
|
||||
|
||||
via the Fork button on the top right. Once that is done you can add your
|
||||
personal repository as a remote to your local pixman development git checkout:
|
||||
|
||||
git remote add my-gitlab git@gitlab.freedesktop.org:YOURUSERNAME/pixman.git
|
||||
|
||||
git fetch my-gitlab
|
||||
|
||||
Make sure to have added ssh keys to your gitlab profile at
|
||||
|
||||
https://gitlab.freedesktop.org/profile/keys
|
||||
|
||||
Once that is set up, the general workflow for sending patches is to create a
|
||||
new local branch with your improvements and once it's ready push it to your
|
||||
personal pixman fork:
|
||||
|
||||
git checkout -b fix-some-bug
|
||||
...
|
||||
git push my-gitlab
|
||||
|
||||
The output of the `git push` command will include a link that allows you to
|
||||
create a Merge Request against the official pixman repository.
|
||||
|
||||
Whenever you make changes to your branch (add new commits or fix up commits)
|
||||
you push them back to your personal pixman fork:
|
||||
|
||||
git push -f my-gitlab
|
||||
|
||||
If there is an open Merge Request Gitlab will automatically pick up the
|
||||
changes from your branch and pixman developers can review them anew.
|
||||
|
||||
In order for your patches to be accepted, please consider the
|
||||
following guidelines:
|
||||
|
||||
- At each point in the series, pixman should compile and the test
|
||||
suite should pass.
|
||||
|
||||
The exception here is if you are changing the test suite to
|
||||
demonstrate a bug. In this case, make one commit that makes the
|
||||
test suite fail due to the bug, and then another commit that fixes
|
||||
the bug.
|
||||
|
||||
You can run the test suite with
|
||||
|
||||
meson test -C builddir
|
||||
|
||||
It will take around two minutes to run on a modern PC.
|
||||
|
||||
- Follow the coding style described in the CODING_STYLE file
|
||||
|
||||
- For bug fixes, include an update to the test suite to make sure
|
||||
the bug doesn't reappear.
|
||||
|
||||
- For new features, add tests of the feature to the test
|
||||
suite. Also, add a program demonstrating the new feature to the
|
||||
demos/ directory.
|
||||
|
||||
- Write descriptive commit messages. Useful information to include:
|
||||
- Benchmark results, before and after
|
||||
- Description of the bug that was fixed
|
||||
- Detailed rationale for any new API
|
||||
- Alternative approaches that were rejected (and why they
|
||||
don't work)
|
||||
- If review comments were incorporated, a brief version
|
||||
history describing what those changes were.
|
||||
|
||||
- For big patch series, write an introductory post with an overall
|
||||
description of the patch series, including benchmarks and
|
||||
motivation. Each commit message should still be descriptive and
|
||||
include enough information to understand why this particular commit
|
||||
was necessary.
|
||||
|
||||
Pixman has high standards for code quality and so almost everybody
|
||||
should expect to have the first versions of their patches rejected.
|
||||
|
||||
If you think that the reviewers are wrong about something, or that the
|
||||
guidelines above are wrong, feel free to discuss the issue. The purpose
|
||||
of the guidelines and code review is to ensure high code quality; it is
|
||||
not an exercise in compliance.
|
||||
|
67
RELEASING
67
RELEASING
@ -4,55 +4,46 @@ Here are the steps to follow to create a new pixman release:
|
||||
and that you are up to date with the latest commits in the central
|
||||
repository. Here are a couple of useful commands:
|
||||
|
||||
git diff (no output)
|
||||
|
||||
git status (should report "nothing to commit")
|
||||
# This should report "nothing to commit (working directory clean")
|
||||
git status
|
||||
|
||||
git log master...origin (no output; note: *3* dots)
|
||||
# This should give no output, (note there are *3* dots)
|
||||
git log master...origin
|
||||
|
||||
2) Increment the version in meson.build.
|
||||
2) Verify that the code passes "make distcheck".
|
||||
|
||||
3) Make sure that new version works, including
|
||||
NOTE: There is some test code in the test directory, but it's
|
||||
not yet integrated into "make distcheck" yet. It might be
|
||||
useful to run those programs, (but I don't know how to
|
||||
interpret those results). Another very useful thing to do is
|
||||
to run the cairo test suite against pixman. This can be done
|
||||
by running the following commands with the latest cairo
|
||||
release:
|
||||
|
||||
- meson test passes
|
||||
tar xzf cairo-X.Y.Z.tar.gz
|
||||
cd cairo
|
||||
CAIRO_TEST_TARGET=image make test
|
||||
|
||||
- the X server still works with the new pixman version
|
||||
installed
|
||||
4) Increment pixman_{major|minor|micro} in configure.ac according to
|
||||
the directions in that file. Also note that if there is an ABI
|
||||
change then there is further work to be done, (also described in
|
||||
configure.in).
|
||||
|
||||
- the cairo test suite hasn't gained any new failures compared
|
||||
to last pixman version.
|
||||
5) Use "git commit" record any changes made in steps 3 and 4.
|
||||
|
||||
4) Use "git commit" to record the changes made in step 2 and 3.
|
||||
6) Generate the final tar files with
|
||||
|
||||
5) Generate and publish the tar files by running
|
||||
make distcheck
|
||||
|
||||
make PREV=<last version> GPGKEY=<your gpg key id> release-publish
|
||||
And publish the tar files to everywhere appropriate.
|
||||
|
||||
If your freedesktop user name is different from your local one,
|
||||
then also set the variable USER to your freedesktop user name.
|
||||
|
||||
6) Run
|
||||
|
||||
make release-publish-message
|
||||
|
||||
to generate a draft release announcement. Edit it as appropriate and
|
||||
send it to
|
||||
|
||||
cairo-announce@cairographics.org
|
||||
|
||||
pixman@lists.freedesktop.org
|
||||
|
||||
xorg-announce@lists.freedesktop.org
|
||||
Note: There's a "make release-publish" target to help with this
|
||||
step, (creating the tar file and publishing it), but it depends on
|
||||
getting gpg setup first. It's probably the right way to go in the
|
||||
future, though.
|
||||
|
||||
7) Increment pixman_micro to the next larger (odd) number in
|
||||
configure.ac. Commit this change, and push all commits created
|
||||
during this process using
|
||||
during this process.
|
||||
|
||||
git push
|
||||
git push --tags
|
||||
|
||||
You must use "--tags" here; otherwise the new tag will not
|
||||
be pushed out.
|
||||
|
||||
8) Change the topic of the #cairo IRC channel on freenode to advertise
|
||||
the new version.
|
||||
8) Send email announcements of the release to everywhere appropriate.
|
||||
|
249
TODO
Normal file
249
TODO
Normal file
@ -0,0 +1,249 @@
|
||||
- Rename "SSE" to "MMX_EXTENSIONS"
|
||||
|
||||
- Behdad's MMX issue - see list
|
||||
|
||||
- SSE 2 issues:
|
||||
|
||||
- Commented-out uses of fbCompositeCopyAreasse2()
|
||||
|
||||
- Use MM_HINT_NTA instead of MM_HINT_T0
|
||||
|
||||
- Use of fbCompositeOver_x888x8x8888sse2()
|
||||
|
||||
- Use pixmanFillsse2 and pixmanBltsse2
|
||||
|
||||
- Update the RLEASING file
|
||||
|
||||
- Things to keep in mind if breaking ABI:
|
||||
|
||||
- There should be a guard #ifndef I_AM_EITHER_CAIRO_OR_THE_X_SERVER
|
||||
|
||||
- X server will require 16.16 essentially forever. Can we get
|
||||
the required precision by simply adding offset_x/y to the
|
||||
relevant rendering API?
|
||||
|
||||
- pixman_image_set_indexed() should copy its argument, and X
|
||||
should be ported over to use a pixman_image as the
|
||||
representation of a Picture, rather than creating one on each
|
||||
operation.
|
||||
|
||||
- We should get rid of pixman_set_static_pointers()
|
||||
|
||||
- We should get rid of the various trapezoid helper functions().
|
||||
(They only exist because they are theoretically available to
|
||||
drivers).
|
||||
|
||||
- Regions should become 32 bit
|
||||
|
||||
- There should only be one trap rasterization API.
|
||||
|
||||
- The PIXMAN_g8/c8/etc formats should use the A channel
|
||||
to indicate the actual depth. That way PIXMAN_x4c4 and PIXMAN_c8
|
||||
won't collide.
|
||||
|
||||
- Make pixman_region_point_in() survive a NULL box, then fix up
|
||||
pixman-compose.c
|
||||
|
||||
- Possibly look into inlining the fetch functions
|
||||
|
||||
- Test suite
|
||||
|
||||
- Add a general way of dealing with architecture specific
|
||||
fast-paths. The current idea is to have each operation that can
|
||||
be optimized is called through a function pointer that is
|
||||
initially set to an initialization function that is responsible for
|
||||
setting the function pointer to the appropriate fast-path.
|
||||
|
||||
- Go through things marked FIXME
|
||||
|
||||
- Add calls to prepare and finish access where necessary. grep for
|
||||
ACCESS_MEM, and make sure they are correctly wrapped in prepare
|
||||
and finish.
|
||||
|
||||
- restore READ/WRITE in the fbcompose combiners since they sometimes
|
||||
store directly to destination drawables.
|
||||
|
||||
- It probably makes sense to move the more strange X region API
|
||||
into pixman as well, but guarded with PIXMAN_XORG_COMPATIBILITY
|
||||
|
||||
- Reinstate the FbBits typedef? At the moment we don't
|
||||
even have the FbBits type; we just use uint32_t everywhere.
|
||||
|
||||
Keith says in bug 2335:
|
||||
|
||||
The 64-bit code in fb (pixman) is probably broken; it hasn't been
|
||||
used in quite some time as PCI (and AGP) is 32-bits wide, so
|
||||
doing things 64-bits at a time is a net loss. To quickly fix
|
||||
this, I suggest just using 32-bit datatypes by setting
|
||||
IC_SHIFT to 5 for all machines.
|
||||
|
||||
- Consider whether calling regions region16 is really such a great
|
||||
idea. Vlad wants 32 bit regions for Cairo. This will break X server
|
||||
ABI, but should otherwise be mostly harmless, though a
|
||||
pixman_region_get_boxes16() may be useful.
|
||||
|
||||
- Consider optimizing the 8/16 bit solid fills in pixman-util.c by
|
||||
storing more than one value at a time.
|
||||
|
||||
- Add an image cache to prevent excessive malloc/free. Note that pixman
|
||||
needs to be thread safe when used from cairo.
|
||||
|
||||
- Moving to 24.8 coordinates. This is tricky because X is still
|
||||
defined as 16.16 and will be basically forever. It's possible we
|
||||
could do this by adding extra offset_x/y parameters to the
|
||||
trapezoid calls. The X server could then just call the API with
|
||||
(0, 0). Cairo would have to make sure that the delta *within* a
|
||||
batch of trapezoids does not exceed 16 bit.
|
||||
|
||||
- Consider adding actual backends. Brain dump:
|
||||
|
||||
A backend is something that knows how to
|
||||
|
||||
- Create images
|
||||
- Composite three images
|
||||
- Rasterize trapezoids
|
||||
- Do solid fills and blits
|
||||
|
||||
These operations are provided by a vtable that the backend will
|
||||
create when it is initialized. Initial backends:
|
||||
|
||||
- VMX
|
||||
- SSE2
|
||||
- MMX
|
||||
- Plain Old C
|
||||
|
||||
When the SIMD backends are initialized, they will be passed a
|
||||
pointer to the Plain Old C backend that they can use for fallback
|
||||
purposes.
|
||||
|
||||
Images would gain a vtable as well that would contain things like
|
||||
|
||||
- Read scanline
|
||||
- Write scanline
|
||||
|
||||
(Or even read_patch/write_patch as suggested by Keith a while
|
||||
back).
|
||||
|
||||
This could simplify the compositing code considerably.
|
||||
|
||||
- Review the pixman_format_code_t enum to make sure it will support
|
||||
future formats. Some formats we will probably need:
|
||||
|
||||
ARGB/ABGR with 16/32/64 bit integer/floating channels
|
||||
YUV2,
|
||||
YV12
|
||||
|
||||
Also we may need the ability to distinguish between PICT_c8 and
|
||||
PICT_x4c4. (This could be done by interpreting the A channel as
|
||||
the depth for TYPE_COLOR and TYPE_GRAY formats).
|
||||
|
||||
A possibility may be to reserve the two top bits and make them
|
||||
encode "number of places to shift the channel widths given" Since
|
||||
these bits are 00 at the moment everything will continue to work,
|
||||
but these additional widths will be allowed:
|
||||
|
||||
All even widths between 18-32
|
||||
All multiples of four widths between 33 and 64
|
||||
All multiples of eight between 64 and 128
|
||||
|
||||
This means things like r21g22b21 won't work - is that worth
|
||||
worrying about? I don't think so. And of course the bpp field
|
||||
can't handle a depth of over 256, so > 64 bit channels arent'
|
||||
really all that useful.
|
||||
|
||||
We could reserve one extra bit to indicate floating point, but
|
||||
we may also just add
|
||||
|
||||
PIXMAN_TYPE_ARGB_FLOAT
|
||||
PIXMAN_TYPE_BGRA_FLOAT
|
||||
PIXMAN_TYPE_A_FLOAT
|
||||
|
||||
image types. With five bits we can support up to 32 different
|
||||
format types, which should be enough for everybody, even if we
|
||||
decide to support all the various video formats here:
|
||||
|
||||
http://www.fourcc.org/yuv.php
|
||||
|
||||
It may make sense to have a PIXMAN_TYPE_YUV, and then use the
|
||||
channel bits to specify the exact subtype.
|
||||
|
||||
Another possibility is to add
|
||||
|
||||
PIXMAN_TYPE_ARGB_W
|
||||
PIXMAN_TYPE_ARGB_WW
|
||||
|
||||
where the channel widths would get 16 and 32 added to them,
|
||||
respectively.
|
||||
|
||||
What about color spaces such a linear vs. srGB etc.?
|
||||
|
||||
done:
|
||||
|
||||
- SSE2 issues:
|
||||
- Crashes in Mozilla because of unaligned stack. Possible fixes
|
||||
- Make use of gcc 4.2 feature to align the stack
|
||||
- Write some sort of trampoline that aligns the stack
|
||||
before calling SSE functions.
|
||||
|
||||
- Get rid of the switch-of-doom; replace it with a big table
|
||||
describing the various fast paths.
|
||||
|
||||
- Make source clipping optional.
|
||||
- done: source clipping happens through an indirection.
|
||||
still needs to make the indirection settable. (And call it
|
||||
from X)
|
||||
|
||||
- Run cairo test suite; fix bugs
|
||||
- one bug in source-scale-clip
|
||||
|
||||
- Remove the warning suppression in the ACCESS_MEM macro and fix the
|
||||
warnings that are real
|
||||
- irrelevant now.
|
||||
|
||||
- make the wrapper functions global instead of image specific
|
||||
- this won't work since pixman is linked to both fb and wfb
|
||||
|
||||
- Add non-mmx solid fill
|
||||
|
||||
- Make sure the endian-ness macros are defined correctly.
|
||||
|
||||
- The rectangles in a region probably shouldn't be returned const as
|
||||
the X server will be changing them.
|
||||
|
||||
- Right now we _always_ have a clip region, which is empty by default.
|
||||
Why does this work at all? It probably doesn't. The server
|
||||
distinguishes two cases, one where nothing is clipped (CT_NONE), and
|
||||
one where there is a clip region (CT_REGION).
|
||||
|
||||
- Default clip region should be the full image
|
||||
|
||||
- Test if pseudo color still works. It does, but it also shows that
|
||||
copying a pixman_indexed_t on every composite operation is not
|
||||
going to fly. So, for now set_indexed() does not copy the
|
||||
indexed table.
|
||||
|
||||
Also just the malloc() to allocate a pixman image shows up pretty
|
||||
high.
|
||||
|
||||
Options include
|
||||
|
||||
- Make all the setters not copy their arguments
|
||||
|
||||
- Possibly combined with going back to the stack allocated
|
||||
approach that we already use for regions.
|
||||
|
||||
- Keep a cached pixman_image_t around for every picture. It would
|
||||
have to be kept uptodate every time something changes about the
|
||||
picture.
|
||||
|
||||
- Break the X server ABI and simply have the relevant parameter
|
||||
stored in the pixman image. This would have the additional benefits
|
||||
that:
|
||||
|
||||
- We can get rid of the annoying repeat field which is duplicated
|
||||
elsewhere.
|
||||
|
||||
- We can use pixman_color_t and pixman_gradient_stop_t
|
||||
etc. instead of the types that are defined in
|
||||
renderproto.h
|
||||
|
@ -1,5 +0,0 @@
|
||||
.text
|
||||
.arch armv8-a
|
||||
.altmacro
|
||||
prfm pldl2strm, [x0]
|
||||
xtn v0.8b, v0.8h
|
@ -1,10 +0,0 @@
|
||||
.text
|
||||
.arch armv6
|
||||
.object_arch armv4
|
||||
.arm
|
||||
.altmacro
|
||||
#ifndef __ARM_EABI__
|
||||
#error EABI is required (to be sure that calling conventions are compatible)
|
||||
#endif
|
||||
pld [r0]
|
||||
uqadd8 r0, r0, r0
|
12
autogen.sh
Executable file
12
autogen.sh
Executable file
@ -0,0 +1,12 @@
|
||||
#! /bin/sh
|
||||
|
||||
srcdir=`dirname $0`
|
||||
test -z "$srcdir" && srcdir=.
|
||||
|
||||
ORIGDIR=`pwd`
|
||||
cd $srcdir
|
||||
|
||||
autoreconf -v --install || exit 1
|
||||
cd $ORIGDIR || exit $?
|
||||
|
||||
$srcdir/configure --enable-maintainer-mode "$@"
|
326
configure.ac
Normal file
326
configure.ac
Normal file
@ -0,0 +1,326 @@
|
||||
dnl Copyright 2005 Red Hat, Inc.
|
||||
dnl
|
||||
dnl Permission to use, copy, modify, distribute, and sell this software and its
|
||||
dnl documentation for any purpose is hereby granted without fee, provided that
|
||||
dnl the above copyright notice appear in all copies and that both that
|
||||
dnl copyright notice and this permission notice appear in supporting
|
||||
dnl documentation, and that the name of Red Hat not be used in
|
||||
dnl advertising or publicity pertaining to distribution of the software without
|
||||
dnl specific, written prior permission. Red Hat makes no
|
||||
dnl representations about the suitability of this software for any purpose. It
|
||||
dnl is provided "as is" without express or implied warranty.
|
||||
dnl
|
||||
dnl RED HAT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||
dnl INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||
dnl EVENT SHALL RED HAT BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||
dnl CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||
dnl DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
dnl TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
dnl PERFORMANCE OF THIS SOFTWARE.
|
||||
dnl
|
||||
dnl Process this file with autoconf to create configure.
|
||||
|
||||
AC_PREREQ([2.57])
|
||||
|
||||
# Pixman versioning scheme
|
||||
#
|
||||
# - The git version must at all times have an odd MICRO version
|
||||
# number.
|
||||
#
|
||||
# - If you add API, increment the MICRO version to the next largest
|
||||
# odd number.
|
||||
#
|
||||
# - If you release a version that contains new API, then increment
|
||||
# MINOR and set MICRO to 0.
|
||||
#
|
||||
# - If you release a new version that does not contain new API, then
|
||||
# increment MICRO to the next even number.
|
||||
#
|
||||
# - After doing a release, increment MICRO again to make the version
|
||||
# number in git odd.
|
||||
#
|
||||
# - If you break the ABI, then
|
||||
#
|
||||
# - increment MAJOR
|
||||
#
|
||||
# - In the first development release where you break ABI, find
|
||||
# all instances of "pixman-n" and change them to pixman-(n+1)
|
||||
#
|
||||
# This needs to be done at least in
|
||||
# configure.ac
|
||||
# all Makefile.am's
|
||||
# pixman-n.pc.in
|
||||
#
|
||||
# This ensures that binary incompatible versions can be installed
|
||||
# in parallel. See http://www106.pair.com/rhp/parallel.html for
|
||||
# more information
|
||||
|
||||
m4_define([pixman_major], 0)
|
||||
m4_define([pixman_minor], 11)
|
||||
m4_define([pixman_micro], 6)
|
||||
|
||||
m4_define([pixman_version],[pixman_major.pixman_minor.pixman_micro])
|
||||
|
||||
AC_INIT(pixman, pixman_version, "sandmann@daimi.au.dk", pixman)
|
||||
AM_INIT_AUTOMAKE([dist-bzip2])
|
||||
|
||||
AM_CONFIG_HEADER(config.h)
|
||||
|
||||
AC_PROG_CC
|
||||
AC_PROG_LIBTOOL
|
||||
AC_CHECK_FUNCS([getisax])
|
||||
AC_C_BIGENDIAN
|
||||
|
||||
#
|
||||
# We ignore pixman_major in the version here because the major version should
|
||||
# always be encoded in the actual library name. Ie., the soname is:
|
||||
#
|
||||
# pixman-$(pixman_major).0.minor.micro
|
||||
#
|
||||
m4_define([lt_current], [pixman_minor])
|
||||
m4_define([lt_revision], [pixman_micro])
|
||||
m4_define([lt_age], [pixman_minor])
|
||||
|
||||
LT_VERSION_INFO="lt_current:lt_revision:lt_age"
|
||||
|
||||
PIXMAN_VERSION_MAJOR=pixman_major()
|
||||
AC_SUBST(PIXMAN_VERSION_MAJOR)
|
||||
PIXMAN_VERSION_MINOR=pixman_minor()
|
||||
AC_SUBST(PIXMAN_VERSION_MINOR)
|
||||
PIXMAN_VERSION_MICRO=pixman_micro()
|
||||
AC_SUBST(PIXMAN_VERSION_MICRO)
|
||||
|
||||
AC_SUBST(LT_VERSION_INFO)
|
||||
|
||||
# Check for dependencies
|
||||
#PKG_CHECK_MODULES(DEP, x11)
|
||||
|
||||
changequote(,)dnl
|
||||
if test "x$GCC" = "xyes"; then
|
||||
case " $CFLAGS " in
|
||||
*[\ \ ]-Wall[\ \ ]*) ;;
|
||||
*) CFLAGS="$CFLAGS -Wall" ;;
|
||||
esac fi changequote([,])dnl
|
||||
|
||||
AC_PATH_PROG(PERL, perl, no)
|
||||
if test "x$PERL" = xno; then
|
||||
AC_MSG_ERROR([Perl is required to build pixman.])
|
||||
fi
|
||||
AC_SUBST(PERL)
|
||||
|
||||
dnl =========================================================================
|
||||
dnl -fvisibility stuff
|
||||
|
||||
have_gcc4=no
|
||||
AC_MSG_CHECKING(for -fvisibility)
|
||||
AC_COMPILE_IFELSE([
|
||||
#if defined(__GNUC__) && (__GNUC__ >= 4)
|
||||
#else
|
||||
#error Need GCC 4.0 for visibility
|
||||
#endif
|
||||
int main () { return 0; }
|
||||
], have_gcc4=yes)
|
||||
|
||||
if test "x$have_gcc4" = "xyes"; then
|
||||
CFLAGS="$CFLAGS -fvisibility=hidden"
|
||||
fi
|
||||
AC_MSG_RESULT($have_gcc4)
|
||||
|
||||
dnl ===========================================================================
|
||||
dnl Check for MMX
|
||||
|
||||
MMX_CFLAGS="-mmmx -Winline"
|
||||
|
||||
if test "x$GCC" = "xyes"; then
|
||||
MMX_CFLAGS="$MMX_CFLAGS --param inline-unit-growth=10000 --param large-function-growth=10000"
|
||||
fi
|
||||
|
||||
have_mmx_intrinsics=no
|
||||
AC_MSG_CHECKING(whether to use MMX intrinsics)
|
||||
xserver_save_CFLAGS=$CFLAGS
|
||||
CFLAGS="$CFLAGS $MMX_CFLAGS"
|
||||
AC_COMPILE_IFELSE([
|
||||
#if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
|
||||
#error "Need GCC >= 3.4 for MMX intrinsics"
|
||||
#endif
|
||||
#include <mmintrin.h>
|
||||
int main () {
|
||||
__m64 v = _mm_cvtsi32_si64 (1);
|
||||
return _mm_cvtsi64_si32 (v);
|
||||
}], have_mmx_intrinsics=yes)
|
||||
CFLAGS=$xserver_save_CFLAGS
|
||||
|
||||
AC_ARG_ENABLE(mmx,
|
||||
[AC_HELP_STRING([--disable-mmx],
|
||||
[disable MMX fast paths])],
|
||||
[disable_mmx=yes], [disable_mmx=no])
|
||||
|
||||
if test $disable_mmx = yes ; then
|
||||
have_mmx_intrinsics=disabled
|
||||
fi
|
||||
|
||||
if test $have_mmx_intrinsics = yes ; then
|
||||
AC_DEFINE(USE_MMX, 1, [use MMX compiler intrinsics])
|
||||
else
|
||||
MMX_CFLAGS=
|
||||
fi
|
||||
|
||||
AC_MSG_RESULT($have_mmx_intrinsics)
|
||||
|
||||
AM_CONDITIONAL(USE_MMX, test $have_mmx_intrinsics = yes)
|
||||
|
||||
dnl =======================================================
|
||||
|
||||
dnl GCC 4.2 when compiling with -msse will generate SSE instructions
|
||||
dnl on its own. This means anything compiled with -mss can only be
|
||||
dnl run after a runtime check for SSE. Unfortunately, since we still
|
||||
dnl need to support MMX-but-not-SSE (such as the OLPC), this means we
|
||||
dnl can only use SSE when compiling for x86-64 (where SSE is always
|
||||
dnl supported).
|
||||
|
||||
have_sse_intrinsics=no
|
||||
AC_MSG_CHECKING(whether to use SSE intrinsics)
|
||||
xserver_save_CFLAGS=$CFLAGS
|
||||
CFLAGS="$CFLAGS -msse $MMX_CFLAGS"
|
||||
|
||||
AC_COMPILE_IFELSE([
|
||||
#if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
|
||||
#error "Need GCC >= 3.4 for SSE intrinsics"
|
||||
#endif
|
||||
#if !defined(__amd64__) && !defined(__x86_64__)
|
||||
#error "Need x86-64 for SSE"
|
||||
#endif
|
||||
#include <mmintrin.h>
|
||||
#include <xmmintrin.h>
|
||||
int main () {
|
||||
__m64 v = _mm_cvtsi32_si64 (1);
|
||||
v = _mm_shuffle_pi16 (v, _MM_SHUFFLE(3, 3, 3, 3));
|
||||
return _mm_cvtsi64_si32 (v);
|
||||
}], have_sse_intrinsics=yes)
|
||||
CFLAGS=$xserver_save_CFLAGS
|
||||
AC_MSG_RESULT($have_sse_intrinsics)
|
||||
|
||||
if test $have_sse_intrinsics = yes ; then
|
||||
AC_DEFINE(USE_SSE, 1, [use SSE compiler intrinsics])
|
||||
MMX_CFLAGS="-msse $MMX_CFLAGS"
|
||||
fi
|
||||
|
||||
AM_CONDITIONAL(USE_SSE, test $have_sse_intrinsics = yes)
|
||||
|
||||
|
||||
dnl ===========================================================================
|
||||
dnl Check for SSE2
|
||||
|
||||
SSE_CFLAGS="-mmmx -msse2 -Winline"
|
||||
|
||||
if test "x$GCC" = "xyes"; then
|
||||
SSE_CFLAGS="$SSE_CFLAGS --param inline-unit-growth=10000 --param large-function-growth=10000 --param max-inline-insns-single=6000"
|
||||
fi
|
||||
|
||||
have_sse2_intrinsics=no
|
||||
AC_MSG_CHECKING(whether to use SSE2 intrinsics)
|
||||
xserver_save_CFLAGS=$CFLAGS
|
||||
CFLAGS="$CFLAGS -msse2 $SSE_CFLAGS"
|
||||
|
||||
AC_COMPILE_IFELSE([
|
||||
#if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 2))
|
||||
#error "Need GCC >= 4.2 for SSE2 intrinsics"
|
||||
#endif
|
||||
#include <mmintrin.h>
|
||||
#include <xmmintrin.h>
|
||||
#include <emmintrin.h>
|
||||
int main () {
|
||||
__m128i a, b, c;
|
||||
c = _mm_xor_si128 (a, b);
|
||||
return 0;
|
||||
}], have_sse2_intrinsics=yes)
|
||||
CFLAGS=$xserver_save_CFLAGS
|
||||
|
||||
AC_ARG_ENABLE(sse2,
|
||||
[AC_HELP_STRING([--disable-sse2],
|
||||
[disable SSE2 fast paths])],
|
||||
[disable_sse2=yes], [disable_sse2=no])
|
||||
|
||||
if test $disable_sse2 = yes ; then
|
||||
have_sse2_intrinsics=disabled
|
||||
fi
|
||||
|
||||
if test $have_sse2_intrinsics = yes ; then
|
||||
AC_DEFINE(USE_SSE2, 1, [use SSE2 compiler intrinsics])
|
||||
fi
|
||||
|
||||
AC_MSG_RESULT($have_sse2_intrinsics)
|
||||
|
||||
AM_CONDITIONAL(USE_SSE2, test $have_sse2_intrinsics = yes)
|
||||
|
||||
dnl ========================================================
|
||||
AC_SUBST(MMX_CFLAGS)
|
||||
AC_SUBST(SSE_CFLAGS)
|
||||
|
||||
dnl Check for VMX/Altivec
|
||||
if test -n "`$CC -v 2>&1 | grep version | grep Apple`"; then
|
||||
VMX_CFLAGS="-faltivec"
|
||||
else
|
||||
VMX_CFLAGS="-maltivec -mabi=altivec"
|
||||
fi
|
||||
|
||||
have_vmx_intrinsics=no
|
||||
AC_MSG_CHECKING(whether to use VMX/Altivec intrinsics)
|
||||
xserver_save_CFLAGS=$CFLAGS
|
||||
CFLAGS="$CFLAGS $VMX_CFLAGS"
|
||||
AC_COMPILE_IFELSE([
|
||||
#if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
|
||||
#error "Need GCC >= 3.4 for sane altivec support"
|
||||
#endif
|
||||
#include <altivec.h>
|
||||
int main () {
|
||||
vector unsigned int v = vec_splat_u32 (1);
|
||||
v = vec_sub (v, v);
|
||||
return 0;
|
||||
}], have_vmx_intrinsics=yes)
|
||||
CFLAGS=$xserver_save_CFLAGS
|
||||
|
||||
AC_ARG_ENABLE(vmx,
|
||||
[AC_HELP_STRING([--disable-vmx],
|
||||
[disable VMX fast paths])],
|
||||
[disable_vmx=yes], [disable_vmx=no])
|
||||
|
||||
if test $disable_vmx = yes ; then
|
||||
have_vmx_intrinsics=disabled
|
||||
fi
|
||||
|
||||
if test $have_vmx_intrinsics = yes ; then
|
||||
AC_DEFINE(USE_VMX, 1, [use VMX compiler intrinsics])
|
||||
else
|
||||
VMX_CFLAGS=
|
||||
fi
|
||||
|
||||
AC_MSG_RESULT($have_vmx_intrinsics)
|
||||
|
||||
AC_SUBST(VMX_CFLAGS)
|
||||
|
||||
AM_CONDITIONAL(USE_VMX, test $have_vmx_intrinsics = yes)
|
||||
|
||||
AC_ARG_ENABLE(gtk,
|
||||
[AC_HELP_STRING([--disable-gtk],
|
||||
[disable tests using GTK+])],
|
||||
[disable_gtk=yes], [disable_gtk=no])
|
||||
|
||||
if test $disable_gtk = no ; then
|
||||
PKG_CHECK_MODULES(GTK, [gtk+-2.0], [HAVE_GTK=yes], [HAVE_GTK=no])
|
||||
else
|
||||
HAVE_GTK=no
|
||||
fi
|
||||
|
||||
AM_CONDITIONAL(HAVE_GTK, [test "x$HAVE_GTK" = xyes])
|
||||
|
||||
AC_SUBST(GTK_CFLAGS)
|
||||
AC_SUBST(GTK_LIBS)
|
||||
AC_SUBST(DEP_CFLAGS)
|
||||
AC_SUBST(DEP_LIBS)
|
||||
|
||||
AC_OUTPUT([pixman-1.pc
|
||||
Makefile
|
||||
pixman/Makefile
|
||||
pixman/pixman-version.h
|
||||
test/Makefile])
|
3
debian/README.source
vendored
3
debian/README.source
vendored
@ -1,3 +0,0 @@
|
||||
This package uses quilt to manage modifications to the upstream source. See
|
||||
/usr/share/doc/quilt/README.source for details.
|
||||
|
488
debian/changelog
vendored
488
debian/changelog
vendored
@ -1,491 +1,3 @@
|
||||
pixman (0.44.0-4) UNRELEASED; urgency=medium
|
||||
|
||||
* Team upload.
|
||||
* debian/copyright: Convert to machine-readable format
|
||||
|
||||
-- Dylan Aïssi <daissi@debian.org> Thu, 31 Jul 2025 22:16:23 +0200
|
||||
|
||||
pixman (0.44.0-3) unstable; urgency=medium
|
||||
|
||||
* Replace timeout bump patch by using a multiplier option instead.
|
||||
Thanks, Aurelien Jarno! (Closes: #1086999)
|
||||
|
||||
-- Timo Aaltonen <tjaalton@debian.org> Sat, 09 Nov 2024 11:02:55 +0200
|
||||
|
||||
pixman (0.44.0-2) unstable; urgency=medium
|
||||
|
||||
* patches: Increase test timeout 120->240s. (Closes: #1086999)
|
||||
|
||||
-- Timo Aaltonen <tjaalton@debian.org> Fri, 08 Nov 2024 09:58:04 +0200
|
||||
|
||||
pixman (0.44.0-1) unstable; urgency=medium
|
||||
|
||||
* New upstream release.
|
||||
* patches: Refresh patch.
|
||||
* control, rules: Build with meson.
|
||||
* symbols: Updated.
|
||||
* control: Migrate to pkgconf.
|
||||
* rules: Drop obsolete dbgsym-migration.
|
||||
|
||||
-- Timo Aaltonen <tjaalton@debian.org> Thu, 07 Nov 2024 16:48:29 +0200
|
||||
|
||||
pixman (0.42.2-1) unstable; urgency=medium
|
||||
|
||||
* New upstream release.
|
||||
* d/p/Avoid-integer-overflow-leading-to-out-of-bounds-writ.diff:
|
||||
- Removed, fixed upstream.
|
||||
|
||||
-- Emilio Pozuelo Monfort <pochu@debian.org> Fri, 11 Nov 2022 13:42:25 +0100
|
||||
|
||||
pixman (0.40.0-1.1) unstable; urgency=medium
|
||||
|
||||
* Non-maintainer upload.
|
||||
* Avoid integer overflow leading to out-of-bounds write (CVE-2022-44638)
|
||||
(Closes: #1023427)
|
||||
|
||||
-- Salvatore Bonaccorso <carnil@debian.org> Thu, 03 Nov 2022 23:07:46 +0100
|
||||
|
||||
pixman (0.40.0-1) unstable; urgency=medium
|
||||
|
||||
* New upstream release. (Closes: #958298, #832579, #838650)
|
||||
* control, rules: Migrate to debhelper-compat, bump to 13.
|
||||
* symbols: Updated, bump shlibs.
|
||||
|
||||
-- Timo Aaltonen <tjaalton@debian.org> Thu, 03 Dec 2020 15:28:13 +0200
|
||||
|
||||
pixman (0.36.0-1) unstable; urgency=medium
|
||||
|
||||
* New upstream release.
|
||||
* Update to my Debian address.
|
||||
* Update Vcs-* URLs to point to salsa.debian.org.
|
||||
* Use https URL in debian/copyright.
|
||||
* Set source format to 1.0.
|
||||
* Bump debhelper compat to 11.
|
||||
* Bump standards version to 4.2.1.
|
||||
|
||||
-- Andreas Boll <aboll@debian.org> Wed, 12 Dec 2018 22:02:44 +0100
|
||||
|
||||
pixman (0.34.0-2) unstable; urgency=medium
|
||||
|
||||
* Declare Multi-Arch: same for libpixman-1-dev (Closes: #884166).
|
||||
* Switch to dbsym package.
|
||||
* Stop passing --disable-silent-rules to configure, debhelper does it
|
||||
now.
|
||||
* Bump standards version to 4.1.2.
|
||||
|
||||
-- Andreas Boll <andreas.boll.dev@gmail.com> Sun, 17 Dec 2017 13:33:55 +0100
|
||||
|
||||
pixman (0.34.0-1) unstable; urgency=medium
|
||||
|
||||
* Team upload.
|
||||
* New upstream release (no actual changes)
|
||||
* Use https URL in debian/watch.
|
||||
|
||||
-- Julien Cristau <jcristau@debian.org> Sat, 24 Sep 2016 13:25:16 +0200
|
||||
|
||||
pixman (0.33.6-1) unstable; urgency=medium
|
||||
|
||||
* New upstream release candidate.
|
||||
* Add myself to Uploaders.
|
||||
|
||||
-- Andreas Boll <andreas.boll.dev@gmail.com> Thu, 14 Jan 2016 13:46:28 +0100
|
||||
|
||||
pixman (0.33.4-1) unstable; urgency=medium
|
||||
|
||||
* Team upload.
|
||||
* New upstream release candidate.
|
||||
|
||||
-- Andreas Boll <andreas.boll.dev@gmail.com> Wed, 04 Nov 2015 13:26:18 +0100
|
||||
|
||||
pixman (0.33.2-2) sid; urgency=medium
|
||||
|
||||
* Run tests with VERBOSE=1.
|
||||
|
||||
-- Julien Cristau <jcristau@debian.org> Sat, 12 Sep 2015 20:31:06 +0200
|
||||
|
||||
pixman (0.33.2-1) sid; urgency=medium
|
||||
|
||||
[ Andreas Boll ]
|
||||
* New upstream release candidate.
|
||||
* Enable vmx on ppc64el (closes: #786345).
|
||||
* Update Vcs-* fields.
|
||||
* Add upstream url.
|
||||
* Drop XC- prefix from Package-Type field.
|
||||
* Bump standards version to 3.9.6.
|
||||
|
||||
[ intrigeri ]
|
||||
* Simplify hardening build flags handling (closes: #760100).
|
||||
Thanks to Simon Ruderich <simon@ruderich.org> for the patch.
|
||||
* Enable all hardening build flags. Thanks to Simon Ruderich too.
|
||||
|
||||
-- Julien Cristau <jcristau@debian.org> Sat, 12 Sep 2015 13:08:02 +0200
|
||||
|
||||
pixman (0.32.6-3) sid; urgency=medium
|
||||
|
||||
[ intrigeri ]
|
||||
* Enable hardening build flags with dpkg-buildflags.
|
||||
|
||||
-- Julien Cristau <jcristau@debian.org> Sat, 23 Aug 2014 22:16:40 -0700
|
||||
|
||||
pixman (0.32.6-2) sid; urgency=medium
|
||||
|
||||
[ Julien Cristau ]
|
||||
* Disable vmx on ppc64el (closes: #745547). Thanks, Breno Leitao!
|
||||
|
||||
-- Cyril Brulebois <kibi@debian.org> Mon, 18 Aug 2014 22:50:39 +0200
|
||||
|
||||
pixman (0.32.6-1) sid; urgency=medium
|
||||
|
||||
* New upstream release.
|
||||
* Bump debhelper compat level to 9.
|
||||
* Remove Cyril from Uploaders.
|
||||
|
||||
-- Julien Cristau <jcristau@debian.org> Sun, 13 Jul 2014 16:31:06 +0200
|
||||
|
||||
pixman (0.32.4-1) sid; urgency=low
|
||||
|
||||
* New upstream release.
|
||||
|
||||
-- Julien Cristau <jcristau@debian.org> Tue, 17 Dec 2013 22:04:15 +0100
|
||||
|
||||
pixman (0.30.2-2) sid; urgency=low
|
||||
|
||||
* Cherry-pick upstream bigfixes for fixing a crash when rendering
|
||||
invalid trapezoids. (LP: #1197921)
|
||||
Addresses CVE-2013-6425.
|
||||
|
||||
-- Maarten Lankhorst <maarten.lankhorst@ubuntu.com> Mon, 18 Nov 2013 15:08:56 +0100
|
||||
|
||||
pixman (0.30.2-1) sid; urgency=low
|
||||
|
||||
* New upstream release
|
||||
- includes big-endian matrix-test fix
|
||||
* Increase alpha-loop test timeout some more.
|
||||
|
||||
-- Julien Cristau <jcristau@debian.org> Tue, 13 Aug 2013 12:08:18 +0200
|
||||
|
||||
pixman (0.30.0-3) sid; urgency=low
|
||||
|
||||
* Increase timeout for the alpha-loop test. That will hopefully let it pass
|
||||
on the mips buildd.
|
||||
|
||||
-- Julien Cristau <jcristau@debian.org> Sat, 03 Aug 2013 10:24:29 +0200
|
||||
|
||||
pixman (0.30.0-2) sid; urgency=low
|
||||
|
||||
* Disable silent Makefile rules.
|
||||
* Disable arm iwmmxt fast paths. It breaks the build.
|
||||
* Fix matrix-test on big endian (patch from Siarhei Siamashka).
|
||||
|
||||
-- Julien Cristau <jcristau@debian.org> Sat, 27 Jul 2013 21:40:48 +0200
|
||||
|
||||
pixman (0.30.0-1) sid; urgency=low
|
||||
|
||||
[ Maarten Lankhorst, Cyril Brulebois, Julien Cristau ]
|
||||
* New upstream release.
|
||||
|
||||
-- Julien Cristau <jcristau@debian.org> Fri, 26 Jul 2013 14:58:25 +0200
|
||||
|
||||
pixman (0.26.0-4) sid; urgency=high
|
||||
|
||||
* Fix for CVE-2013-1591 (stack-based buffer overflow), cherry-picked from
|
||||
0.27.4 (closes: #700308).
|
||||
|
||||
-- Julien Cristau <jcristau@debian.org> Mon, 18 Feb 2013 19:58:33 +0100
|
||||
|
||||
pixman (0.26.0-3) unstable; urgency=low
|
||||
|
||||
* Pass LS_CFLAGS=" " to configure to prevent -march=loongson2f from
|
||||
being passed to gcc, which would break on loongson2e (see fdo bug
|
||||
#51451). This fixes the test suite failures on mipsel, and should
|
||||
avoid any crashes depending on user systems.
|
||||
|
||||
-- Cyril Brulebois <kibi@debian.org> Wed, 27 Jun 2012 12:11:54 +0200
|
||||
|
||||
pixman (0.26.0-2) unstable; urgency=low
|
||||
|
||||
* Cherry-pick from upstream master branch to fix FTBFS on *i386:
|
||||
- da6193b1fc “mmx: add missing _mm_empty calls”
|
||||
|
||||
-- Cyril Brulebois <kibi@debian.org> Fri, 15 Jun 2012 01:25:20 +0200
|
||||
|
||||
pixman (0.26.0-1) unstable; urgency=low
|
||||
|
||||
* New upstream release.
|
||||
|
||||
-- Cyril Brulebois <kibi@debian.org> Fri, 15 Jun 2012 00:16:47 +0200
|
||||
|
||||
pixman (0.25.6-1) experimental; urgency=low
|
||||
|
||||
* New upstream release candidate.
|
||||
* Remove demos/parrot.jpg before building the source package to avoid
|
||||
“binary file contents changed” until it's shipped in the upstream
|
||||
tarball.
|
||||
|
||||
-- Cyril Brulebois <kibi@debian.org> Sun, 20 May 2012 17:56:35 +0200
|
||||
|
||||
pixman (0.25.2-1) experimental; urgency=low
|
||||
|
||||
* New upstream release candidate.
|
||||
* Add new symbols and bump shlibs accordingly:
|
||||
- pixman_region32_clear
|
||||
- pixman_region_clear
|
||||
|
||||
-- Cyril Brulebois <kibi@debian.org> Fri, 09 Mar 2012 13:17:16 +0100
|
||||
|
||||
pixman (0.24.4-1) unstable; urgency=low
|
||||
|
||||
* New upstream release
|
||||
- Revert "Reject trapezoids where top (botttom) is above (below) the
|
||||
edges" (closes: #656682)
|
||||
|
||||
-- Julien Cristau <jcristau@debian.org> Thu, 09 Feb 2012 21:16:47 +0100
|
||||
|
||||
pixman (0.24.2-1) unstable; urgency=low
|
||||
|
||||
* New upstream release:
|
||||
- Stable bug fix release from the 0.24 branch.
|
||||
|
||||
-- Cyril Brulebois <kibi@debian.org> Thu, 19 Jan 2012 12:22:54 +0100
|
||||
|
||||
pixman (0.24.0-1) unstable; urgency=low
|
||||
|
||||
* New upstream release.
|
||||
|
||||
-- Cyril Brulebois <kibi@debian.org> Mon, 07 Nov 2011 18:13:47 +0100
|
||||
|
||||
pixman (0.23.8-1) unstable; urgency=low
|
||||
|
||||
* New upstream release.
|
||||
|
||||
-- Cyril Brulebois <kibi@debian.org> Tue, 01 Nov 2011 12:29:16 +0100
|
||||
|
||||
pixman (0.23.6-1) experimental; urgency=low
|
||||
|
||||
[ Rico Tzschichholz ]
|
||||
* New upstream release.
|
||||
|
||||
-- Julien Cristau <jcristau@debian.org> Sat, 22 Oct 2011 11:09:04 +0200
|
||||
|
||||
pixman (0.23.2-1) experimental; urgency=low
|
||||
|
||||
* New upstream release.
|
||||
* Enable parallel building (by passing --parallel to dh $@).
|
||||
|
||||
-- Cyril Brulebois <kibi@debian.org> Tue, 05 Jul 2011 01:37:27 +0200
|
||||
|
||||
pixman (0.22.0-1) unstable; urgency=low
|
||||
|
||||
* Team upload.
|
||||
|
||||
[ Steve Langasek ]
|
||||
* Build for multiarch.
|
||||
|
||||
[ Julien Cristau ]
|
||||
* Bump Standards-Version to 3.9.2.
|
||||
* New upstream release (no changes from 0.21.8 except for the version bump).
|
||||
|
||||
-- Julien Cristau <jcristau@debian.org> Sun, 12 Jun 2011 17:02:01 +0200
|
||||
|
||||
pixman (0.21.8-1) unstable; urgency=low
|
||||
|
||||
* New upstream release.
|
||||
* As seen in the upstream announcement: “When this version of pixman is
|
||||
used with the git version of the X server, trapezoid rendering will be
|
||||
corrupted. This is a known bug in the X server.”
|
||||
* This new release should fix the FTBFS on big endian machines, tests
|
||||
were failing due to missing swapping (Closes: #622211).
|
||||
|
||||
-- Cyril Brulebois <kibi@debian.org> Fri, 29 Apr 2011 17:53:12 +0200
|
||||
|
||||
pixman (0.21.6-2) unstable; urgency=low
|
||||
|
||||
* Upload to unstable.
|
||||
|
||||
-- Cyril Brulebois <kibi@debian.org> Sun, 10 Apr 2011 23:08:36 +0200
|
||||
|
||||
pixman (0.21.6-1) experimental; urgency=low
|
||||
|
||||
* New upstream release.
|
||||
* Update symbols file with new symbols.
|
||||
* Bump shlibs accordingly.
|
||||
* Wrap Build-Depends.
|
||||
* Remove libpixman1-dev from Conflicts, last seen in etch!
|
||||
* Update Uploaders list. Thanks, David!
|
||||
* Switch to dh:
|
||||
- Use debhelper 8.
|
||||
- Use dh-autoreconf.
|
||||
- Kill .la files.
|
||||
- Switch dh_install from --list-missing to --fail-missing for
|
||||
additionaly safety.
|
||||
* Add a quilt series placeholder file.
|
||||
* Bump Standards-Version to 3.9.1 (no changes needed).
|
||||
|
||||
-- Cyril Brulebois <kibi@debian.org> Wed, 09 Mar 2011 04:08:02 +0100
|
||||
|
||||
pixman (0.21.4-2) unstable; urgency=low
|
||||
|
||||
* Upload to unstable.
|
||||
|
||||
-- Cyril Brulebois <kibi@debian.org> Sun, 06 Feb 2011 05:31:10 +0100
|
||||
|
||||
pixman (0.21.4-1) experimental; urgency=low
|
||||
|
||||
* New upstream release.
|
||||
* Update debian/copyright from upstream's COPYING.
|
||||
|
||||
-- Cyril Brulebois <kibi@debian.org> Wed, 19 Jan 2011 20:31:26 +0100
|
||||
|
||||
pixman (0.21.2-1) experimental; urgency=low
|
||||
|
||||
* New upstream release.
|
||||
* Update debian/copyright from upstream's COPYING.
|
||||
|
||||
-- Cyril Brulebois <kibi@debian.org> Wed, 17 Nov 2010 15:56:46 +0100
|
||||
|
||||
pixman (0.20.0-1) experimental; urgency=low
|
||||
|
||||
* New upstream release.
|
||||
|
||||
-- Cyril Brulebois <kibi@debian.org> Sat, 06 Nov 2010 10:00:54 +0100
|
||||
|
||||
pixman (0.19.6-1) experimental; urgency=low
|
||||
|
||||
* New upstream release.
|
||||
* Bump SHLIBS_VERSION from 0.18.0 to 0.19.4 for newly-added functions.
|
||||
* Update symbols file with newly-added functions.
|
||||
* Add -c4 to the dh_makeshlibs call, to ensure the build breaks if
|
||||
unexpected symbol-related changes happened.
|
||||
* As of pixman-0.19.2-5-g5b99710, Gtk+ is auto-detected, make sure not
|
||||
to pick it accidentally, by passing --disable-gtk. (That's only for
|
||||
test purposes, but would require pixman-1 itself.)
|
||||
* Enable the testsuite.
|
||||
* Add myself to Uploaders.
|
||||
|
||||
-- Cyril Brulebois <kibi@debian.org> Wed, 27 Oct 2010 23:14:00 +0200
|
||||
|
||||
pixman (0.18.4-1) experimental; urgency=low
|
||||
|
||||
[ Robert Hooker ]
|
||||
* New upstream stable release.
|
||||
|
||||
-- Julien Cristau <jcristau@debian.org> Mon, 06 Sep 2010 21:15:07 +0200
|
||||
|
||||
pixman (0.18.2-1) experimental; urgency=low
|
||||
|
||||
* New upstream stable release. Changes since 0.18.0:
|
||||
- b48d8b5... Pre-release version bump to 0.18.2
|
||||
- 970c183... Add macros for thread local storage on MinGW 32
|
||||
- 61ff1a3... Don't use __thread on MinGW.
|
||||
- f973be4... Don't consider indexed formats opaque.
|
||||
- 34fb385... Add missing HAVE_CONFIG_H guards for config.h inclusion
|
||||
- 38928af... Update README to mention the pixman mailing list
|
||||
- 6649842... [mmx] Fix mask creation bugs
|
||||
- d197dc5... Fixes for pthread thread local storage.
|
||||
- 9babaab... Fix uninitialized cache when pthreads are used
|
||||
- 4fe0a40... Visual Studio 2010 includes stdint.h
|
||||
- 9a46edd... Post-release version bump to 0.18.1
|
||||
|
||||
-- Robert Hooker <sarvatt@ubuntu.com> Fri, 14 May 2010 13:03:42 -0400
|
||||
|
||||
pixman (0.18.0-1) experimental; urgency=low
|
||||
|
||||
* Rename the build directory to not include DEB_BUILD_GNU_TYPE for no
|
||||
good reason. Thanks, Colin Watson!
|
||||
* Remove myself from Uploaders
|
||||
* New upstream release (closes: #579014).
|
||||
* Update symbols file for new API, bump shlibs.
|
||||
* Drop pixman-arm-don-t-use-env-vars-to-get-hwcap-platform.patch, obsolete.
|
||||
|
||||
-- Julien Cristau <jcristau@debian.org> Tue, 11 May 2010 14:16:09 +0200
|
||||
|
||||
pixman (0.16.4-1) unstable; urgency=low
|
||||
|
||||
* New upstream release.
|
||||
* Add dependencies on ${misc:Depends} (lintian).
|
||||
* Bump Standards-Version to 3.8.3.
|
||||
|
||||
-- Julien Cristau <jcristau@debian.org> Sat, 02 Jan 2010 11:26:29 +0000
|
||||
|
||||
pixman (0.16.2-1) unstable; urgency=low
|
||||
|
||||
* New upstream release (closes: #546849).
|
||||
* Upload to unstable.
|
||||
|
||||
-- Julien Cristau <jcristau@debian.org> Mon, 28 Sep 2009 18:12:47 +0200
|
||||
|
||||
pixman (0.15.20-1) experimental; urgency=low
|
||||
|
||||
* New upstream release candidate.
|
||||
* Bump shlibs and update symbols file for
|
||||
pixman_disable_out_of_bounds_workaround and new formats.
|
||||
* Add patch to disable use of env vars to force hwcap and platform on arm.
|
||||
* Add README.source with a pointer to the quilt package.
|
||||
|
||||
-- Julien Cristau <jcristau@debian.org> Sun, 23 Aug 2009 12:44:59 +0200
|
||||
|
||||
pixman (0.15.14-1) experimental; urgency=low
|
||||
|
||||
* Update debian/copyright from upstream COPYING (closes: #519078). Thanks,
|
||||
Jo Shields!
|
||||
* New upstream development release.
|
||||
* Enable arm simd, we can do runtime detection now.
|
||||
* Update symbols file and bump shlibs for new version.
|
||||
* Run dh_shlibdeps after dh_installdeb to avoid a dpkg-shlibdeps warning.
|
||||
* Move libpixman-1-0-dbg to new 'debug' section.
|
||||
* Add ~ to pixman_image_set_source_clipping version in symbols file, to make
|
||||
lintian happy.
|
||||
* Don't handle nostrip explicitly in debian/rules, dh_strip does that for
|
||||
us.
|
||||
* Use filter instead of findstring for DEB_BUILD_OPTIONS parsing, as
|
||||
standardized by policy 3.8.0.
|
||||
* Handle parallel=n in DEB_BUILD_OPTIONS.
|
||||
* Bump Standards-Version to 3.8.2.
|
||||
* Version the build-dep on debhelper to silence lintian.
|
||||
|
||||
-- Julien Cristau <jcristau@debian.org> Wed, 24 Jun 2009 21:13:07 +0200
|
||||
|
||||
pixman (0.14.0-1) unstable; urgency=low
|
||||
|
||||
[ Brice Goglin ]
|
||||
* Update upstream URL in debian/copyright.
|
||||
* Install the upstream ChangeLog.
|
||||
|
||||
[ Julien Cristau ]
|
||||
* New upstream release.
|
||||
|
||||
-- Julien Cristau <jcristau@debian.org> Sun, 15 Feb 2009 23:01:14 +0100
|
||||
|
||||
pixman (0.13.2-1) experimental; urgency=low
|
||||
|
||||
[ Timo Aaltonen ]
|
||||
* New upstream release.
|
||||
* Update libpixman-1-0.symbols with new symbols.
|
||||
|
||||
[ Julien Cristau ]
|
||||
* Don't use ARM SIMD code. It doesn't do runtime detection, and will only
|
||||
work on ARMv6.
|
||||
* Fix shlibs for the udeb.
|
||||
|
||||
-- Julien Cristau <jcristau@debian.org> Sun, 04 Jan 2009 21:39:31 +0100
|
||||
|
||||
pixman (0.12.0-1) experimental; urgency=low
|
||||
|
||||
* New upstream release.
|
||||
* Bump pixman_format_supported_source's version in the symbols file, depth
|
||||
30 formats were added in 0.11.10.
|
||||
* Bump shlibs to 0.11.10 as well.
|
||||
|
||||
-- Julien Cristau <jcristau@debian.org> Sun, 21 Sep 2008 17:01:01 +0200
|
||||
|
||||
pixman (0.11.8-1) experimental; urgency=low
|
||||
|
||||
* New upstream development release.
|
||||
* Bump versions for pixman_image_create_bits and
|
||||
pixman_format_supported_destination, as some formats were added in 0.11.6.
|
||||
|
||||
-- Julien Cristau <jcristau@debian.org> Fri, 18 Jul 2008 15:21:17 +0200
|
||||
|
||||
pixman (0.11.6-1) experimental; urgency=low
|
||||
|
||||
* New upstream development release.
|
||||
|
1
debian/compat
vendored
Normal file
1
debian/compat
vendored
Normal file
@ -0,0 +1 @@
|
||||
5
|
42
debian/control
vendored
42
debian/control
vendored
@ -2,25 +2,16 @@ Source: pixman
|
||||
Section: devel
|
||||
Priority: optional
|
||||
Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
|
||||
Uploaders: Andreas Boll <aboll@debian.org>
|
||||
Build-Depends:
|
||||
debhelper-compat (= 13),
|
||||
meson,
|
||||
pkgconf,
|
||||
quilt,
|
||||
Standards-Version: 4.2.1
|
||||
Vcs-Git: https://salsa.debian.org/xorg-team/lib/pixman.git
|
||||
Vcs-Browser: https://salsa.debian.org/xorg-team/lib/pixman
|
||||
Homepage: http://pixman.org/
|
||||
Uploaders: Julien Cristau <jcristau@debian.org>, David Nusinow <dnusinow@debian.org>
|
||||
Build-Depends: debhelper, automake, autoconf, libtool, pkg-config
|
||||
Standards-Version: 3.7.3
|
||||
Vcs-Git: git://git.debian.org/git/pkg-xorg/lib/pixman
|
||||
Vcs-Browser: http://git.debian.org/?p=pkg-xorg/lib/pixman.git
|
||||
|
||||
Package: libpixman-1-0
|
||||
Section: libs
|
||||
Architecture: any
|
||||
Depends:
|
||||
${shlibs:Depends},
|
||||
${misc:Depends},
|
||||
Pre-Depends: ${misc:Pre-Depends}
|
||||
Multi-Arch: same
|
||||
Depends: ${shlibs:Depends}
|
||||
Description: pixel-manipulation library for X and cairo
|
||||
A library for manipulating pixel regions -- a set of Y-X banded
|
||||
rectangles, image compositing using the Porter/Duff model
|
||||
@ -29,22 +20,27 @@ Description: pixel-manipulation library for X and cairo
|
||||
|
||||
Package: libpixman-1-0-udeb
|
||||
Section: debian-installer
|
||||
Package-Type: udeb
|
||||
XC-Package-Type: udeb
|
||||
Architecture: any
|
||||
Depends:
|
||||
${shlibs:Depends},
|
||||
${misc:Depends},
|
||||
Depends: ${shlibs:Depends}
|
||||
Description: pixel-manipulation library for X and cairo
|
||||
This package contains a minimal set of libraries needed for the Debian
|
||||
installer. Do not install it on a normal system.
|
||||
|
||||
Package: libpixman-1-0-dbg
|
||||
Section: libdevel
|
||||
Priority: extra
|
||||
Architecture: any
|
||||
Depends: libpixman-1-0 (= ${binary:Version})
|
||||
Description: pixel-manipulation library for X and cairo (debugging symbols)
|
||||
Debugging symbols for the Cairo/X pixel manipulation library. This is
|
||||
needed to debug programs linked against libpixman0.
|
||||
|
||||
Package: libpixman-1-dev
|
||||
Section: libdevel
|
||||
Architecture: any
|
||||
Depends:
|
||||
libpixman-1-0 (= ${binary:Version}),
|
||||
${misc:Depends},
|
||||
Multi-Arch: same
|
||||
Depends: libpixman-1-0 (= ${binary:Version})
|
||||
Conflicts: libpixman1-dev
|
||||
Description: pixel-manipulation library for X and cairo (development files)
|
||||
Development libraries, header files and documentation needed by
|
||||
programs that want to compile with the Cairo/X pixman library.
|
||||
|
113
debian/copyright
vendored
113
debian/copyright
vendored
@ -1,48 +1,71 @@
|
||||
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||
Upstream-Name: pixman
|
||||
Source: https://gitlab.freedesktop.org/pixman/pixman
|
||||
License: Expat
|
||||
Debian packaging by Julien Cristau <jcristau@debian.org>, 18 May 2007.
|
||||
Downloaded from git://anongit.freedesktop.org/git/pixman.
|
||||
|
||||
Files: *
|
||||
Copyright: 1987-1998 The Open Group
|
||||
1987-1989 Digital Equipment Corporation
|
||||
1999-2008 Keith Packard
|
||||
2000 SuSE, Inc.
|
||||
2000 Keith Packard, member of The XFree86 Project, Inc.
|
||||
2004-2010 Red Hat, Inc.
|
||||
2004 Nicholas Miell
|
||||
2005 Lars Knoll & Zack Rusin, Trolltech
|
||||
2005 Trolltech AS
|
||||
2007 Luca Barbato
|
||||
2008 Aaron Plattner, NVIDIA Corporation
|
||||
2008 Rodrigo Kumpera
|
||||
2008 André Tupinambá
|
||||
2008 Mozilla Corporation
|
||||
2008 Frederic Plourde
|
||||
2009, Oracle and/or its affiliates. All rights reserved.
|
||||
2009-2010 Nokia Corporation
|
||||
License: Expat
|
||||
Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
|
||||
2005 Lars Knoll & Zack Rusin, Trolltech
|
||||
Copyright © 2000 SuSE, Inc.
|
||||
Copyright © 2007 Red Hat, Inc.
|
||||
Copyright © 1998 Keith Packard
|
||||
|
||||
Files: debian/*
|
||||
Copyright: 2007 Julien Cristau <jcristau@debian.org>
|
||||
License: Expat
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation, and that the name of the copyright holders not be used in
|
||||
advertising or publicity pertaining to distribution of the software without
|
||||
specific, written prior permission. The copyright holders make no
|
||||
representations about the suitability of this software for any purpose. It
|
||||
is provided "as is" without express or implied warranty.
|
||||
|
||||
THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
|
||||
SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
|
||||
AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
SOFTWARE.
|
||||
|
||||
Copyright 1987, 1988, 1989, 1998 The Open Group
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
Except as contained in this notice, the name of The Open Group shall not be
|
||||
used in advertising or otherwise to promote the sale, use or other dealings
|
||||
in this Software without prior written authorization from The Open Group.
|
||||
|
||||
Copyright 1987, 1988, 1989 by
|
||||
Digital Equipment Corporation, Maynard, Massachusetts.
|
||||
|
||||
All Rights Reserved
|
||||
|
||||
Permission to use, copy, modify, and distribute this software and its
|
||||
documentation for any purpose and without fee is hereby granted,
|
||||
provided that the above copyright notice appear in all copies and that
|
||||
both that copyright notice and this permission notice appear in
|
||||
supporting documentation, and that the name of Digital not be
|
||||
used in advertising or publicity pertaining to distribution of the
|
||||
software without specific, written prior permission.
|
||||
|
||||
DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
|
||||
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
|
||||
DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
|
||||
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
||||
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
||||
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
SOFTWARE.
|
||||
|
||||
License: Expat
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
.
|
||||
The above copyright notice and this permission notice (including the next
|
||||
paragraph) shall be included in all copies or substantial portions of the
|
||||
Software.
|
||||
.
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
DEALINGS IN THE SOFTWARE.
|
||||
|
2
debian/libpixman-1-0-udeb.install
vendored
2
debian/libpixman-1-0-udeb.install
vendored
@ -1 +1 @@
|
||||
usr/lib/*/libpixman-1.so.* /usr/lib
|
||||
usr/lib/libpixman-1.so.*
|
||||
|
2
debian/libpixman-1-0.install
vendored
2
debian/libpixman-1-0.install
vendored
@ -1 +1 @@
|
||||
usr/lib/*/libpixman-1.so.*
|
||||
usr/lib/libpixman-1.so.*
|
||||
|
2
debian/libpixman-1-0.lintian-overrides
vendored
2
debian/libpixman-1-0.lintian-overrides
vendored
@ -1,2 +0,0 @@
|
||||
libpixman-1-0: symbols-declares-dependency-on-other-package libpixman-1-0-private
|
||||
|
2
debian/libpixman-1-0.shlibs
vendored
Normal file
2
debian/libpixman-1-0.shlibs
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
libpixman-1 0 libpixman-1-0 (>= 0.11.6)
|
||||
udeb: libpixman-1 0 libpixman-1-0-udeb (>= 0.11.6)
|
81
debian/libpixman-1-0.symbols
vendored
81
debian/libpixman-1-0.symbols
vendored
@ -1,59 +1,20 @@
|
||||
libpixman-1.so.0 libpixman-1-0 #MINVER#
|
||||
| libpixman-1-0-private
|
||||
_pixman_internal_only_get_implementation@Base 0 1
|
||||
pixman_add_trapezoids@Base 0
|
||||
pixman_add_traps@Base 0
|
||||
pixman_add_triangles@Base 0.21.6
|
||||
pixman_blt@Base 0
|
||||
pixman_composite_glyphs@Base 0.27.2
|
||||
pixman_composite_glyphs_no_mask@Base 0.27.2
|
||||
pixman_composite_trapezoids@Base 0.21.6
|
||||
pixman_composite_triangles@Base 0.21.6
|
||||
pixman_compute_composite_region@Base 0
|
||||
pixman_disable_out_of_bounds_workaround@Base 0.15.16
|
||||
pixman_edge_init@Base 0
|
||||
pixman_edge_step@Base 0
|
||||
pixman_f_transform_bounds@Base 0.13.2
|
||||
pixman_f_transform_from_pixman_transform@Base 0.13.2
|
||||
pixman_f_transform_init_identity@Base 0.13.2
|
||||
pixman_f_transform_init_rotate@Base 0.13.2
|
||||
pixman_f_transform_init_scale@Base 0.13.2
|
||||
pixman_f_transform_init_translate@Base 0.13.2
|
||||
pixman_f_transform_invert@Base 0.13.2
|
||||
pixman_f_transform_multiply@Base 0.13.2
|
||||
pixman_f_transform_point@Base 0.13.2
|
||||
pixman_f_transform_point_3d@Base 0.13.2
|
||||
pixman_f_transform_rotate@Base 0.13.2
|
||||
pixman_f_transform_scale@Base 0.13.2
|
||||
pixman_f_transform_translate@Base 0.13.2
|
||||
pixman_fill@Base 0
|
||||
pixman_filter_create_separable_convolution@Base 0.30.0
|
||||
pixman_format_supported_destination@Base 0.15.16
|
||||
pixman_format_supported_source@Base 0.15.16
|
||||
pixman_glyph_cache_create@Base 0.27.2
|
||||
pixman_glyph_cache_destroy@Base 0.27.2
|
||||
pixman_glyph_cache_freeze@Base 0.27.2
|
||||
pixman_glyph_cache_insert@Base 0.27.2
|
||||
pixman_glyph_cache_lookup@Base 0.27.2
|
||||
pixman_glyph_cache_remove@Base 0.27.2
|
||||
pixman_glyph_cache_thaw@Base 0.27.2
|
||||
pixman_glyph_get_extents@Base 0.27.2
|
||||
pixman_glyph_get_mask_format@Base 0.27.2
|
||||
pixman_image_composite@Base 0.15.14
|
||||
pixman_image_composite32@Base 0.18.0
|
||||
pixman_image_create_bits@Base 0.15.12
|
||||
pixman_image_create_bits_no_clear@Base 0.27.4
|
||||
pixman_image_composite@Base 0.9.4-2
|
||||
pixman_image_create_bits@Base 0.10.0
|
||||
pixman_image_create_conical_gradient@Base 0
|
||||
pixman_image_create_linear_gradient@Base 0
|
||||
pixman_image_create_radial_gradient@Base 0
|
||||
pixman_image_create_solid_fill@Base 0
|
||||
pixman_image_fill_boxes@Base 0.18.0
|
||||
pixman_image_fill_rectangles@Base 0.15.14
|
||||
pixman_image_get_component_alpha@Base 0.19.6
|
||||
pixman_image_fill_rectangles@Base 0.9.4-2
|
||||
pixman_image_get_data@Base 0
|
||||
pixman_image_get_depth@Base 0
|
||||
pixman_image_get_destroy_data@Base 0.18.0
|
||||
pixman_image_get_format@Base 0.19.6
|
||||
pixman_image_get_height@Base 0
|
||||
pixman_image_get_stride@Base 0
|
||||
pixman_image_get_width@Base 0
|
||||
@ -63,34 +24,27 @@ libpixman-1.so.0 libpixman-1-0 #MINVER#
|
||||
pixman_image_set_clip_region32@Base 0.11.2
|
||||
pixman_image_set_clip_region@Base 0
|
||||
pixman_image_set_component_alpha@Base 0
|
||||
pixman_image_set_destroy_function@Base 0.15.12
|
||||
pixman_image_set_dither@Base 0.40.0
|
||||
pixman_image_set_dither_offset@Base 0.40.0
|
||||
pixman_image_set_filter@Base 0.30.0
|
||||
pixman_image_set_filter@Base 0
|
||||
pixman_image_set_has_client_clip@Base 0
|
||||
pixman_image_set_indexed@Base 0
|
||||
pixman_image_set_repeat@Base 0
|
||||
pixman_image_set_source_clipping@Base 0.9.4-2~
|
||||
pixman_image_set_source_clipping@Base 0.9.4-2
|
||||
pixman_image_set_transform@Base 0
|
||||
pixman_image_unref@Base 0
|
||||
pixman_line_fixed_edge_init@Base 0
|
||||
pixman_rasterize_edges@Base 0
|
||||
pixman_rasterize_trapezoid@Base 0
|
||||
pixman_region32_clear@Base 0.25.2
|
||||
pixman_region32_contains_point@Base 0.11.2
|
||||
pixman_region32_contains_rectangle@Base 0.11.2
|
||||
pixman_region32_copy@Base 0.11.2
|
||||
pixman_region32_empty@Base 0.44.0
|
||||
pixman_region32_equal@Base 0.11.2
|
||||
pixman_region32_extents@Base 0.11.2
|
||||
pixman_region32_fini@Base 0.11.2
|
||||
pixman_region32_init@Base 0.11.2
|
||||
pixman_region32_init_from_image@Base 0.18.0
|
||||
pixman_region32_init_rect@Base 0.11.2
|
||||
pixman_region32_init_rects@Base 0.11.2
|
||||
pixman_region32_init_with_extents@Base 0.11.2
|
||||
pixman_region32_intersect@Base 0.11.2
|
||||
pixman_region32_intersect_rect@Base 0.19.6
|
||||
pixman_region32_inverse@Base 0.11.2
|
||||
pixman_region32_n_rects@Base 0.11.2
|
||||
pixman_region32_not_empty@Base 0.11.2
|
||||
@ -101,21 +55,17 @@ libpixman-1.so.0 libpixman-1-0 #MINVER#
|
||||
pixman_region32_translate@Base 0.11.2
|
||||
pixman_region32_union@Base 0.11.2
|
||||
pixman_region32_union_rect@Base 0.11.2
|
||||
pixman_region_clear@Base 0.25.2
|
||||
pixman_region_contains_point@Base 0
|
||||
pixman_region_contains_rectangle@Base 0
|
||||
pixman_region_copy@Base 0
|
||||
pixman_region_empty@Base 0.44.0
|
||||
pixman_region_equal@Base 0
|
||||
pixman_region_extents@Base 0
|
||||
pixman_region_fini@Base 0
|
||||
pixman_region_init@Base 0
|
||||
pixman_region_init_from_image@Base 0.18.0
|
||||
pixman_region_init_rect@Base 0
|
||||
pixman_region_init_rects@Base 0
|
||||
pixman_region_init_with_extents@Base 0
|
||||
pixman_region_intersect@Base 0
|
||||
pixman_region_intersect_rect@Base 0.19.6
|
||||
pixman_region_inverse@Base 0
|
||||
pixman_region_n_rects@Base 0
|
||||
pixman_region_not_empty@Base 0
|
||||
@ -129,25 +79,8 @@ libpixman-1.so.0 libpixman-1-0 #MINVER#
|
||||
pixman_region_union_rect@Base 0
|
||||
pixman_sample_ceil_y@Base 0
|
||||
pixman_sample_floor_y@Base 0
|
||||
pixman_transform_bounds@Base 0.13.2
|
||||
pixman_transform_from_pixman_f_transform@Base 0.13.2
|
||||
pixman_transform_init_identity@Base 0.13.2
|
||||
pixman_transform_init_rotate@Base 0.13.2
|
||||
pixman_transform_init_scale@Base 0.13.2
|
||||
pixman_transform_init_translate@Base 0.13.2
|
||||
pixman_transform_invert@Base 0.13.2
|
||||
pixman_transform_is_identity@Base 0.13.2
|
||||
pixman_transform_is_int_translate@Base 0.13.2
|
||||
pixman_transform_is_inverse@Base 0.13.2
|
||||
pixman_transform_is_scale@Base 0.13.2
|
||||
pixman_transform_multiply@Base 0.13.2
|
||||
pixman_transform_point@Base 0.13.2
|
||||
pixman_transform_point_31_16@Base 0 1
|
||||
pixman_transform_point_31_16_3d@Base 0 1
|
||||
pixman_transform_point_31_16_affine@Base 0 1
|
||||
pixman_transform_rotate@Base 0.13.2
|
||||
pixman_transform_scale@Base 0.13.2
|
||||
pixman_transform_translate@Base 0.13.2
|
||||
pixman_transform_point_3d@Base 0
|
||||
pixman_version@Base 0.10.0
|
||||
pixman_version_string@Base 0.10.0
|
||||
pixman_format_supported_destination@Base 0.10.0
|
||||
pixman_format_supported_source@Base 0.10.0
|
||||
|
5
debian/libpixman-1-dev.install
vendored
5
debian/libpixman-1-dev.install
vendored
@ -1,3 +1,4 @@
|
||||
usr/lib/*/libpixman-1.so
|
||||
usr/lib/*/pkgconfig
|
||||
usr/lib/libpixman-1.so
|
||||
usr/lib/libpixman-1.a
|
||||
usr/lib/pkgconfig
|
||||
usr/include/pixman-1
|
||||
|
1
debian/patches/series
vendored
1
debian/patches/series
vendored
@ -1 +0,0 @@
|
||||
test-increase-timeout.diff
|
11
debian/patches/test-increase-timeout.diff
vendored
11
debian/patches/test-increase-timeout.diff
vendored
@ -1,11 +0,0 @@
|
||||
--- a/test/alpha-loop.c
|
||||
+++ b/test/alpha-loop.c
|
||||
@@ -22,7 +22,7 @@ main (int argc, char **argv)
|
||||
d = pixman_image_create_bits (PIXMAN_a8r8g8b8, WIDTH, HEIGHT, dest, WIDTH * 4);
|
||||
s = pixman_image_create_bits (PIXMAN_a2r10g10b10, WIDTH, HEIGHT, src, WIDTH * 4);
|
||||
|
||||
- fail_after (5, "Infinite loop detected: 5 seconds without progress\n");
|
||||
+ fail_after (50, "Infinite loop detected: 50 seconds without progress\n");
|
||||
|
||||
pixman_image_set_alpha_map (s, a, 0, 0);
|
||||
pixman_image_set_alpha_map (a, s, 0, 0);
|
109
debian/rules
vendored
109
debian/rules
vendored
@ -1,32 +1,97 @@
|
||||
#!/usr/bin/make -f
|
||||
|
||||
PACKAGE = libpixman-1-0
|
||||
SHLIBS = 0.40.0
|
||||
|
||||
export DEB_BUILD_MAINT_OPTIONS = hardening=+all
|
||||
CFLAGS = -Wall -g
|
||||
ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
|
||||
CFLAGS += -O0
|
||||
else
|
||||
CFLAGS += -O2
|
||||
endif
|
||||
ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
|
||||
INSTALL_PROGRAM += -s
|
||||
endif
|
||||
|
||||
# Disable Gtk+ autodetection:
|
||||
override_dh_auto_configure:
|
||||
# also avoid loongson2f optimizations on mipsel, see 0.26.0-3
|
||||
# changelog entry:
|
||||
LS_CFLAGS=" " dh_auto_configure -- \
|
||||
-Dgtk=disabled
|
||||
DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH)
|
||||
DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
|
||||
DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
|
||||
ifeq ($(DEB_BUILD_GNU_TYPE), $(DEB_HOST_GNU_TYPE))
|
||||
confflags += --build=$(DEB_HOST_GNU_TYPE)
|
||||
else
|
||||
confflags += --build=$(DEB_BUILD_GNU_TYPE) --host=$(DEB_HOST_GNU_TYPE)
|
||||
endif
|
||||
|
||||
# Install in debian/tmp to retain control through dh_install:
|
||||
override_dh_auto_install:
|
||||
dh_auto_install --destdir=debian/tmp
|
||||
autogen: autogen-stamp
|
||||
autogen-stamp:
|
||||
dh_testdir
|
||||
autoreconf -vfi
|
||||
touch $@
|
||||
|
||||
# Kill *.la files, and forget no-one:
|
||||
override_dh_install:
|
||||
find debian/tmp -name '*.la' -delete
|
||||
dh_install
|
||||
config: config-stamp
|
||||
config-stamp: autogen-stamp
|
||||
dh_testdir
|
||||
test -d obj-$(DEB_BUILD_GNU_TYPE) || mkdir obj-$(DEB_BUILD_GNU_TYPE)
|
||||
cd obj-$(DEB_BUILD_GNU_TYPE) && \
|
||||
../configure --prefix=/usr --mandir=\$${prefix}/share/man \
|
||||
--infodir=\$${prefix}/share/info $(confflags) \
|
||||
CFLAGS="$(CFLAGS)"
|
||||
touch $@
|
||||
|
||||
# Shlibs:
|
||||
override_dh_makeshlibs:
|
||||
dh_makeshlibs -p$(PACKAGE) --add-udeb $(PACKAGE)-udeb -V"$(PACKAGE) (>= $(SHLIBS))" -- -c4
|
||||
|
||||
override_dh_auto_test:
|
||||
dh_auto_test -- --verbose --timeout-multiplier 3
|
||||
build: build-stamp
|
||||
build-stamp: config-stamp
|
||||
dh_testdir
|
||||
cd obj-$(DEB_BUILD_GNU_TYPE) && $(MAKE)
|
||||
|
||||
touch $@
|
||||
|
||||
%:
|
||||
dh $@ --with quilt --builddirectory=build/
|
||||
clean:
|
||||
dh_testdir
|
||||
dh_testroot
|
||||
rm -f autogen-stamp config-stamp build-stamp install-stamp
|
||||
|
||||
rm -f config.cache config.log config.status
|
||||
rm -f */config.cache */config.log */config.status
|
||||
rm -f conftest* */conftest*
|
||||
rm -rf autom4te.cache */autom4te.cache
|
||||
rm -rf obj-*
|
||||
rm -f $$(find -name Makefile.in)
|
||||
rm -f compile config.guess config.sub configure depcomp install-sh
|
||||
rm -f ltmain.sh missing INSTALL aclocal.m4 config.h.in
|
||||
|
||||
dh_clean
|
||||
|
||||
install: install-stamp
|
||||
install-stamp: build-stamp
|
||||
dh_testdir
|
||||
dh_testroot
|
||||
dh_clean -k
|
||||
dh_installdirs
|
||||
|
||||
cd obj-$(DEB_BUILD_GNU_TYPE) && $(MAKE) DESTDIR=$(CURDIR)/debian/tmp install
|
||||
touch $@
|
||||
|
||||
# Install architecture-dependent files here.
|
||||
binary-arch: install
|
||||
dh_testdir
|
||||
dh_testroot
|
||||
|
||||
dh_installdocs
|
||||
dh_install --sourcedir=debian/tmp --list-missing
|
||||
dh_installchangelogs
|
||||
dh_link
|
||||
dh_strip --dbg-package=$(PACKAGE)-dbg
|
||||
dh_compress
|
||||
dh_fixperms
|
||||
dh_makeshlibs -p$(PACKAGE) --add-udeb $(PACKAGE)-udeb
|
||||
dh_shlibdeps
|
||||
dh_installdeb
|
||||
dh_gencontrol
|
||||
dh_md5sums
|
||||
dh_builddeb
|
||||
|
||||
binary-indep: install
|
||||
# Nothing to do
|
||||
|
||||
binary: binary-indep binary-arch
|
||||
.PHONY: autogen config build clean binary-indep binary-arch binary install
|
||||
|
1
debian/source/format
vendored
1
debian/source/format
vendored
@ -1 +0,0 @@
|
||||
1.0
|
3
debian/watch
vendored
3
debian/watch
vendored
@ -1,3 +1,2 @@
|
||||
#git=git://anongit.freedesktop.org/pixman
|
||||
version=3
|
||||
https://xorg.freedesktop.org/releases/individual/lib/ pixman-(.*)\.tar\.gz
|
||||
http://xorg.freedesktop.org/releases/individual/lib/ pixman-(.*)\.tar\.gz
|
||||
|
@ -1,119 +0,0 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "pixman.h"
|
||||
#include "gtk-utils.h"
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
#define WIDTH 400
|
||||
#define HEIGHT 200
|
||||
|
||||
uint32_t *alpha = malloc (WIDTH * HEIGHT * 4);
|
||||
uint32_t *dest = malloc (WIDTH * HEIGHT * 4);
|
||||
uint32_t *src = malloc (WIDTH * HEIGHT * 4);
|
||||
pixman_image_t *grad_img;
|
||||
pixman_image_t *alpha_img;
|
||||
pixman_image_t *dest_img;
|
||||
pixman_image_t *src_img;
|
||||
int i;
|
||||
pixman_gradient_stop_t stops[2] =
|
||||
{
|
||||
{ pixman_int_to_fixed (0), { 0x0000, 0x0000, 0x0000, 0x0000 } },
|
||||
{ pixman_int_to_fixed (1), { 0xffff, 0x0000, 0x1111, 0xffff } }
|
||||
};
|
||||
pixman_point_fixed_t p1 = { pixman_double_to_fixed (0), 0 };
|
||||
pixman_point_fixed_t p2 = { pixman_double_to_fixed (WIDTH),
|
||||
pixman_int_to_fixed (0) };
|
||||
#if 0
|
||||
pixman_transform_t trans = {
|
||||
{ { pixman_double_to_fixed (2), pixman_double_to_fixed (0.5), pixman_double_to_fixed (-100), },
|
||||
{ pixman_double_to_fixed (0), pixman_double_to_fixed (3), pixman_double_to_fixed (0), },
|
||||
{ pixman_double_to_fixed (0), pixman_double_to_fixed (0.000), pixman_double_to_fixed (1.0) }
|
||||
}
|
||||
};
|
||||
#else
|
||||
pixman_transform_t trans = {
|
||||
{ { pixman_fixed_1, 0, 0 },
|
||||
{ 0, pixman_fixed_1, 0 },
|
||||
{ 0, 0, pixman_fixed_1 } }
|
||||
};
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
pixman_point_fixed_t c_inner;
|
||||
pixman_point_fixed_t c_outer;
|
||||
pixman_fixed_t r_inner;
|
||||
pixman_fixed_t r_outer;
|
||||
#endif
|
||||
|
||||
for (i = 0; i < WIDTH * HEIGHT; ++i)
|
||||
alpha[i] = 0x4f00004f; /* pale blue */
|
||||
|
||||
alpha_img = pixman_image_create_bits (PIXMAN_a8r8g8b8,
|
||||
WIDTH, HEIGHT,
|
||||
alpha,
|
||||
WIDTH * 4);
|
||||
|
||||
for (i = 0; i < WIDTH * HEIGHT; ++i)
|
||||
dest[i] = 0xffffff00; /* yellow */
|
||||
|
||||
dest_img = pixman_image_create_bits (PIXMAN_a8r8g8b8,
|
||||
WIDTH, HEIGHT,
|
||||
dest,
|
||||
WIDTH * 4);
|
||||
|
||||
for (i = 0; i < WIDTH * HEIGHT; ++i)
|
||||
src[i] = 0xffff0000;
|
||||
|
||||
src_img = pixman_image_create_bits (PIXMAN_a8r8g8b8,
|
||||
WIDTH, HEIGHT,
|
||||
src,
|
||||
WIDTH * 4);
|
||||
|
||||
#if 0
|
||||
c_inner.x = pixman_double_to_fixed (50.0);
|
||||
c_inner.y = pixman_double_to_fixed (50.0);
|
||||
c_outer.x = pixman_double_to_fixed (50.0);
|
||||
c_outer.y = pixman_double_to_fixed (50.0);
|
||||
r_inner = 0;
|
||||
r_outer = pixman_double_to_fixed (50.0);
|
||||
|
||||
grad_img = pixman_image_create_conical_gradient (&c_inner, r_inner,
|
||||
stops, 2);
|
||||
#endif
|
||||
#if 0
|
||||
grad_img = pixman_image_create_conical_gradient (&c_inner, r_inner,
|
||||
stops, 2);
|
||||
grad_img = pixman_image_create_linear_gradient (&c_inner, &c_outer,
|
||||
r_inner, r_outer,
|
||||
stops, 2);
|
||||
#endif
|
||||
|
||||
grad_img = pixman_image_create_linear_gradient (&p1, &p2,
|
||||
stops, 2);
|
||||
|
||||
pixman_image_set_transform (grad_img, &trans);
|
||||
pixman_image_set_repeat (grad_img, PIXMAN_REPEAT_PAD);
|
||||
|
||||
pixman_image_composite (PIXMAN_OP_OVER, grad_img, NULL, alpha_img,
|
||||
0, 0, 0, 0, 0, 0, 10 * WIDTH, HEIGHT);
|
||||
|
||||
pixman_image_set_alpha_map (src_img, alpha_img, 10, 10);
|
||||
|
||||
pixman_image_composite (PIXMAN_OP_OVER, src_img, NULL, dest_img,
|
||||
0, 0, 0, 0, 0, 0, 10 * WIDTH, HEIGHT);
|
||||
|
||||
printf ("0, 0: %x\n", dest[0]);
|
||||
printf ("10, 10: %x\n", dest[10 * 10 + 10]);
|
||||
printf ("w, h: %x\n", dest[(HEIGHT - 1) * 100 + (WIDTH - 1)]);
|
||||
|
||||
show_image (dest_img);
|
||||
|
||||
pixman_image_unref (src_img);
|
||||
pixman_image_unref (grad_img);
|
||||
pixman_image_unref (alpha_img);
|
||||
free (dest);
|
||||
|
||||
return 0;
|
||||
}
|
@ -1,71 +0,0 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "pixman.h"
|
||||
#include "gtk-utils.h"
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
#define WIDTH 400
|
||||
#define HEIGHT 400
|
||||
#define TILE_SIZE 25
|
||||
|
||||
pixman_image_t *checkerboard;
|
||||
pixman_image_t *destination;
|
||||
#define D2F(d) (pixman_double_to_fixed(d))
|
||||
pixman_transform_t trans = { {
|
||||
{ D2F (-1.96830), D2F (-1.82250), D2F (512.12250)},
|
||||
{ D2F (0.00000), D2F (-7.29000), D2F (1458.00000)},
|
||||
{ D2F (0.00000), D2F (-0.00911), D2F (0.59231)},
|
||||
}};
|
||||
int i, j;
|
||||
|
||||
checkerboard = pixman_image_create_bits (PIXMAN_a8r8g8b8,
|
||||
WIDTH, HEIGHT,
|
||||
NULL, 0);
|
||||
|
||||
destination = pixman_image_create_bits (PIXMAN_a8r8g8b8,
|
||||
WIDTH, HEIGHT,
|
||||
NULL, 0);
|
||||
|
||||
for (i = 0; i < HEIGHT / TILE_SIZE; ++i)
|
||||
{
|
||||
for (j = 0; j < WIDTH / TILE_SIZE; ++j)
|
||||
{
|
||||
double u = (double)(j + 1) / (WIDTH / TILE_SIZE);
|
||||
double v = (double)(i + 1) / (HEIGHT / TILE_SIZE);
|
||||
pixman_color_t black = { 0, 0, 0, 0xffff };
|
||||
pixman_color_t white = {
|
||||
v * 0xffff,
|
||||
u * 0xffff,
|
||||
(1 - (double)u) * 0xffff,
|
||||
0xffff };
|
||||
pixman_color_t *c;
|
||||
pixman_image_t *fill;
|
||||
|
||||
if ((j & 1) != (i & 1))
|
||||
c = &black;
|
||||
else
|
||||
c = &white;
|
||||
|
||||
fill = pixman_image_create_solid_fill (c);
|
||||
|
||||
pixman_image_composite (PIXMAN_OP_SRC, fill, NULL, checkerboard,
|
||||
0, 0, 0, 0, j * TILE_SIZE, i * TILE_SIZE,
|
||||
TILE_SIZE, TILE_SIZE);
|
||||
}
|
||||
}
|
||||
|
||||
pixman_image_set_transform (checkerboard, &trans);
|
||||
pixman_image_set_filter (checkerboard, PIXMAN_FILTER_BEST, NULL, 0);
|
||||
pixman_image_set_repeat (checkerboard, PIXMAN_REPEAT_NONE);
|
||||
|
||||
pixman_image_composite (PIXMAN_OP_SRC,
|
||||
checkerboard, NULL, destination,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
WIDTH, HEIGHT);
|
||||
|
||||
show_image (destination);
|
||||
|
||||
return 0;
|
||||
}
|
@ -1,50 +0,0 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "pixman.h"
|
||||
#include "gtk-utils.h"
|
||||
|
||||
/* This test demonstrates that clipping is done totally different depending
|
||||
* on whether the source is transformed or not.
|
||||
*/
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
#define WIDTH 200
|
||||
#define HEIGHT 200
|
||||
|
||||
#define SMALL 25
|
||||
|
||||
uint32_t *sbits = malloc (SMALL * SMALL * 4);
|
||||
uint32_t *bits = malloc (WIDTH * HEIGHT * 4);
|
||||
pixman_transform_t trans = {
|
||||
{
|
||||
{ pixman_double_to_fixed (1.0), pixman_double_to_fixed (0), pixman_double_to_fixed (-0.1), },
|
||||
{ pixman_double_to_fixed (0), pixman_double_to_fixed (1), pixman_double_to_fixed (-0.1), },
|
||||
{ pixman_double_to_fixed (0), pixman_double_to_fixed (0), pixman_double_to_fixed (1.0) }
|
||||
} };
|
||||
|
||||
pixman_image_t *src_img = pixman_image_create_bits (PIXMAN_a8r8g8b8, SMALL, SMALL, sbits, 4 * SMALL);
|
||||
pixman_image_t *dest_img = pixman_image_create_bits (PIXMAN_a8r8g8b8, WIDTH, HEIGHT, bits, 4 * WIDTH);
|
||||
|
||||
memset (bits, 0xff, WIDTH * HEIGHT * 4);
|
||||
memset (sbits, 0x00, SMALL * SMALL * 4);
|
||||
|
||||
pixman_image_composite (PIXMAN_OP_IN,
|
||||
src_img, NULL, dest_img,
|
||||
0, 0, 0, 0, SMALL, SMALL, 200, 200);
|
||||
|
||||
pixman_image_set_transform (src_img, &trans);
|
||||
|
||||
pixman_image_composite (PIXMAN_OP_IN,
|
||||
src_img, NULL, dest_img,
|
||||
0, 0, 0, 0, SMALL * 2, SMALL * 2, 200, 200);
|
||||
|
||||
show_image (dest_img);
|
||||
|
||||
pixman_image_unref (src_img);
|
||||
pixman_image_unref (dest_img);
|
||||
free (bits);
|
||||
|
||||
return 0;
|
||||
}
|
@ -1,97 +0,0 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "pixman.h"
|
||||
#include "gtk-utils.h"
|
||||
|
||||
#define WIDTH 200
|
||||
#define HEIGHT 200
|
||||
|
||||
static pixman_image_t *
|
||||
create_solid_bits (uint32_t pixel)
|
||||
{
|
||||
uint32_t *pixels = malloc (WIDTH * HEIGHT * 4);
|
||||
int i;
|
||||
|
||||
for (i = 0; i < WIDTH * HEIGHT; ++i)
|
||||
pixels[i] = pixel;
|
||||
|
||||
return pixman_image_create_bits (PIXMAN_a8r8g8b8,
|
||||
WIDTH, HEIGHT,
|
||||
pixels,
|
||||
WIDTH * 4);
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
pixman_image_t *gradient_img;
|
||||
pixman_image_t *src_img, *dst_img;
|
||||
pixman_gradient_stop_t stops[2] =
|
||||
{
|
||||
{ pixman_int_to_fixed (0), { 0xffff, 0x0000, 0x0000, 0xffff } },
|
||||
{ pixman_int_to_fixed (1), { 0xffff, 0xffff, 0x0000, 0xffff } }
|
||||
};
|
||||
#if 0
|
||||
pixman_point_fixed_t p1 = { 0, 0 };
|
||||
pixman_point_fixed_t p2 = { pixman_int_to_fixed (WIDTH),
|
||||
pixman_int_to_fixed (HEIGHT) };
|
||||
#endif
|
||||
pixman_point_fixed_t c_inner;
|
||||
pixman_point_fixed_t c_outer;
|
||||
pixman_fixed_t r_inner;
|
||||
pixman_fixed_t r_outer;
|
||||
pixman_region32_t clip_region;
|
||||
pixman_transform_t trans = {
|
||||
{ { pixman_double_to_fixed (1.3), pixman_double_to_fixed (0), pixman_double_to_fixed (-0.5), },
|
||||
{ pixman_double_to_fixed (0), pixman_double_to_fixed (1), pixman_double_to_fixed (-0.5), },
|
||||
{ pixman_double_to_fixed (0), pixman_double_to_fixed (0), pixman_double_to_fixed (1.0) }
|
||||
}
|
||||
};
|
||||
|
||||
src_img = create_solid_bits (0xff0000ff);
|
||||
|
||||
c_inner.x = pixman_double_to_fixed (100.0);
|
||||
c_inner.y = pixman_double_to_fixed (100.0);
|
||||
c_outer.x = pixman_double_to_fixed (100.0);
|
||||
c_outer.y = pixman_double_to_fixed (100.0);
|
||||
r_inner = 0;
|
||||
r_outer = pixman_double_to_fixed (100.0);
|
||||
|
||||
gradient_img = pixman_image_create_radial_gradient (&c_inner, &c_outer,
|
||||
r_inner, r_outer,
|
||||
stops, 2);
|
||||
|
||||
#if 0
|
||||
gradient_img = pixman_image_create_linear_gradient (&p1, &p2,
|
||||
stops, 2);
|
||||
|
||||
#endif
|
||||
|
||||
pixman_image_composite (PIXMAN_OP_OVER, gradient_img, NULL, src_img,
|
||||
0, 0, 0, 0, 0, 0, WIDTH, HEIGHT);
|
||||
|
||||
pixman_region32_init_rect (&clip_region, 50, 0, 100, 200);
|
||||
pixman_image_set_clip_region32 (src_img, &clip_region);
|
||||
pixman_image_set_source_clipping (src_img, TRUE);
|
||||
pixman_image_set_has_client_clip (src_img, TRUE);
|
||||
pixman_image_set_transform (src_img, &trans);
|
||||
pixman_image_set_repeat (src_img, PIXMAN_REPEAT_NORMAL);
|
||||
|
||||
dst_img = create_solid_bits (0xffff0000);
|
||||
pixman_image_composite (PIXMAN_OP_OVER, src_img, NULL, dst_img,
|
||||
0, 0, 0, 0, 0, 0, WIDTH, HEIGHT);
|
||||
|
||||
|
||||
#if 0
|
||||
printf ("0, 0: %x\n", src[0]);
|
||||
printf ("10, 10: %x\n", src[10 * 10 + 10]);
|
||||
printf ("w, h: %x\n", src[(HEIGHT - 1) * 100 + (WIDTH - 1)]);
|
||||
#endif
|
||||
|
||||
show_image (dst_img);
|
||||
|
||||
pixman_image_unref (gradient_img);
|
||||
pixman_image_unref (src_img);
|
||||
|
||||
return 0;
|
||||
}
|
@ -1,186 +0,0 @@
|
||||
#include <gtk/gtk.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include "pixman.h"
|
||||
#include "gtk-utils.h"
|
||||
#include "parrot.c"
|
||||
|
||||
#define WIDTH 80
|
||||
#define HEIGHT 80
|
||||
|
||||
typedef struct {
|
||||
const char *name;
|
||||
pixman_op_t op;
|
||||
} operator_t;
|
||||
|
||||
static const operator_t operators[] = {
|
||||
{ "CLEAR", PIXMAN_OP_CLEAR },
|
||||
{ "SRC", PIXMAN_OP_SRC },
|
||||
{ "DST", PIXMAN_OP_DST },
|
||||
{ "OVER", PIXMAN_OP_OVER },
|
||||
{ "OVER_REVERSE", PIXMAN_OP_OVER_REVERSE },
|
||||
{ "IN", PIXMAN_OP_IN },
|
||||
{ "IN_REVERSE", PIXMAN_OP_IN_REVERSE },
|
||||
{ "OUT", PIXMAN_OP_OUT },
|
||||
{ "OUT_REVERSE", PIXMAN_OP_OUT_REVERSE },
|
||||
{ "ATOP", PIXMAN_OP_ATOP },
|
||||
{ "ATOP_REVERSE", PIXMAN_OP_ATOP_REVERSE },
|
||||
{ "XOR", PIXMAN_OP_XOR },
|
||||
{ "ADD", PIXMAN_OP_ADD },
|
||||
{ "SATURATE", PIXMAN_OP_SATURATE },
|
||||
|
||||
{ "MULTIPLY", PIXMAN_OP_MULTIPLY },
|
||||
{ "SCREEN", PIXMAN_OP_SCREEN },
|
||||
{ "OVERLAY", PIXMAN_OP_OVERLAY },
|
||||
{ "DARKEN", PIXMAN_OP_DARKEN },
|
||||
{ "LIGHTEN", PIXMAN_OP_LIGHTEN },
|
||||
{ "COLOR_DODGE", PIXMAN_OP_COLOR_DODGE },
|
||||
{ "COLOR_BURN", PIXMAN_OP_COLOR_BURN },
|
||||
{ "HARD_LIGHT", PIXMAN_OP_HARD_LIGHT },
|
||||
{ "SOFT_LIGHT", PIXMAN_OP_SOFT_LIGHT },
|
||||
{ "DIFFERENCE", PIXMAN_OP_DIFFERENCE },
|
||||
{ "EXCLUSION", PIXMAN_OP_EXCLUSION },
|
||||
{ "HSL_HUE", PIXMAN_OP_HSL_HUE },
|
||||
{ "HSL_SATURATION", PIXMAN_OP_HSL_SATURATION },
|
||||
{ "HSL_COLOR", PIXMAN_OP_HSL_COLOR },
|
||||
{ "HSL_LUMINOSITY", PIXMAN_OP_HSL_LUMINOSITY },
|
||||
};
|
||||
|
||||
static uint32_t
|
||||
reader (const void *src, int size)
|
||||
{
|
||||
switch (size)
|
||||
{
|
||||
case 1:
|
||||
return *(uint8_t *)src;
|
||||
case 2:
|
||||
return *(uint16_t *)src;
|
||||
case 4:
|
||||
return *(uint32_t *)src;
|
||||
default:
|
||||
g_assert_not_reached();
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
writer (void *src, uint32_t value, int size)
|
||||
{
|
||||
switch (size)
|
||||
{
|
||||
case 1:
|
||||
*(uint8_t *)src = value;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
*(uint16_t *)src = value;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
*(uint32_t *)src = value;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
#define d2f pixman_double_to_fixed
|
||||
|
||||
GtkWidget *window, *swindow;
|
||||
GtkWidget *table;
|
||||
uint32_t *dest = malloc (WIDTH * HEIGHT * 4);
|
||||
uint32_t *src = malloc (WIDTH * HEIGHT * 4);
|
||||
pixman_image_t *gradient, *parrot;
|
||||
pixman_image_t *dest_img;
|
||||
pixman_point_fixed_t p1 = { -10 << 16, 10 << 16 };
|
||||
pixman_point_fixed_t p2 = { (WIDTH + 10) << 16, (HEIGHT - 10) << 16 };
|
||||
uint16_t alpha = 0xdddd;
|
||||
pixman_gradient_stop_t stops[6] =
|
||||
{
|
||||
{ d2f (0.0), { 0xf2f2, 0x8787, 0x7d7d, alpha } },
|
||||
{ d2f (0.22), { 0xf3f3, 0xeaea, 0x8383, alpha } },
|
||||
{ d2f (0.42), { 0x6b6b, 0xc0c0, 0x7777, alpha } },
|
||||
{ d2f (0.57), { 0x4b4b, 0xc9c9, 0xf5f5, alpha } },
|
||||
{ d2f (0.75), { 0x6a6a, 0x7f7f, 0xbebe, alpha } },
|
||||
{ d2f (1.0), { 0xeded, 0x8282, 0xb0b0, alpha } },
|
||||
};
|
||||
|
||||
int i;
|
||||
|
||||
gtk_init (&argc, &argv);
|
||||
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
|
||||
gtk_window_set_default_size (GTK_WINDOW (window), 800, 600);
|
||||
|
||||
g_signal_connect (window, "delete-event",
|
||||
G_CALLBACK (gtk_main_quit),
|
||||
NULL);
|
||||
table = gtk_table_new (G_N_ELEMENTS (operators) / 6, 6, TRUE);
|
||||
|
||||
gradient = pixman_image_create_linear_gradient (&p1, &p2, stops, G_N_ELEMENTS (stops));
|
||||
parrot = pixman_image_create_bits (PIXMAN_a8r8g8b8, WIDTH, HEIGHT, (uint32_t *)parrot_bits, WIDTH * 4);
|
||||
|
||||
pixman_image_set_repeat (gradient, PIXMAN_REPEAT_PAD);
|
||||
|
||||
dest_img = pixman_image_create_bits (PIXMAN_a8r8g8b8,
|
||||
WIDTH, HEIGHT,
|
||||
NULL,
|
||||
WIDTH * 4);
|
||||
pixman_image_set_accessors (dest_img, reader, writer);
|
||||
|
||||
for (i = 0; i < G_N_ELEMENTS (operators); ++i)
|
||||
{
|
||||
GtkWidget *image;
|
||||
GdkPixbuf *pixbuf;
|
||||
GtkWidget *vbox;
|
||||
GtkWidget *label;
|
||||
|
||||
vbox = gtk_vbox_new (FALSE, 0);
|
||||
|
||||
label = gtk_label_new (operators[i].name);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 6);
|
||||
gtk_widget_show (label);
|
||||
|
||||
pixman_image_composite (PIXMAN_OP_SRC, gradient, NULL, dest_img,
|
||||
0, 0, 0, 0, 0, 0, WIDTH, HEIGHT);
|
||||
pixman_image_composite (operators[i].op, parrot, NULL, dest_img,
|
||||
0, 0, 0, 0, 0, 0, WIDTH, HEIGHT);
|
||||
pixbuf = pixbuf_from_argb32 (pixman_image_get_data (dest_img),
|
||||
WIDTH, HEIGHT, WIDTH * 4);
|
||||
image = gtk_image_new_from_pixbuf (pixbuf);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), image, FALSE, FALSE, 0);
|
||||
gtk_widget_show (image);
|
||||
|
||||
gtk_table_attach_defaults (GTK_TABLE (table), vbox,
|
||||
i % 6, (i % 6) + 1, i / 6, (i / 6) + 1);
|
||||
gtk_widget_show (vbox);
|
||||
|
||||
g_object_unref (pixbuf);
|
||||
}
|
||||
|
||||
pixman_image_unref (gradient);
|
||||
free (src);
|
||||
pixman_image_unref (dest_img);
|
||||
free (dest);
|
||||
|
||||
swindow = gtk_scrolled_window_new (NULL, NULL);
|
||||
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (swindow),
|
||||
GTK_POLICY_AUTOMATIC,
|
||||
GTK_POLICY_AUTOMATIC);
|
||||
|
||||
gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (swindow), table);
|
||||
gtk_widget_show (table);
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (window), swindow);
|
||||
gtk_widget_show (swindow);
|
||||
|
||||
gtk_widget_show (window);
|
||||
|
||||
gtk_main ();
|
||||
|
||||
return 0;
|
||||
}
|
@ -1,100 +0,0 @@
|
||||
#include "utils.h"
|
||||
#include "gtk-utils.h"
|
||||
|
||||
#define SIZE 128
|
||||
#define GRADIENTS_PER_ROW 7
|
||||
#define NUM_ROWS ((NUM_GRADIENTS + GRADIENTS_PER_ROW - 1) / GRADIENTS_PER_ROW)
|
||||
#define WIDTH (SIZE * GRADIENTS_PER_ROW)
|
||||
#define HEIGHT (SIZE * NUM_ROWS)
|
||||
#define NUM_GRADIENTS 35
|
||||
|
||||
#define double_to_color(x) \
|
||||
(((uint32_t) ((x)*65536)) - (((uint32_t) ((x)*65536)) >> 16))
|
||||
|
||||
#define PIXMAN_STOP(offset,r,g,b,a) \
|
||||
{ pixman_double_to_fixed (offset), \
|
||||
{ \
|
||||
double_to_color (r), \
|
||||
double_to_color (g), \
|
||||
double_to_color (b), \
|
||||
double_to_color (a) \
|
||||
} \
|
||||
}
|
||||
|
||||
|
||||
static const pixman_gradient_stop_t stops[] = {
|
||||
PIXMAN_STOP (0.25, 1, 0, 0, 0.7),
|
||||
PIXMAN_STOP (0.5, 1, 1, 0, 0.7),
|
||||
PIXMAN_STOP (0.75, 0, 1, 0, 0.7),
|
||||
PIXMAN_STOP (1.0, 0, 0, 1, 0.7)
|
||||
};
|
||||
|
||||
#define NUM_STOPS (sizeof (stops) / sizeof (stops[0]))
|
||||
|
||||
static pixman_image_t *
|
||||
create_conical (int index)
|
||||
{
|
||||
pixman_point_fixed_t c;
|
||||
double angle;
|
||||
|
||||
c.x = pixman_double_to_fixed (0);
|
||||
c.y = pixman_double_to_fixed (0);
|
||||
|
||||
angle = (0.5 / NUM_GRADIENTS + index / (double)NUM_GRADIENTS) * 720 - 180;
|
||||
|
||||
return pixman_image_create_conical_gradient (
|
||||
&c, pixman_double_to_fixed (angle), stops, NUM_STOPS);
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
pixman_transform_t transform;
|
||||
pixman_image_t *src_img, *dest_img;
|
||||
int i;
|
||||
|
||||
enable_divbyzero_exceptions ();
|
||||
|
||||
dest_img = pixman_image_create_bits (PIXMAN_a8r8g8b8,
|
||||
WIDTH, HEIGHT,
|
||||
NULL, 0);
|
||||
|
||||
draw_checkerboard (dest_img, 25, 0xffaaaaaa, 0xff888888);
|
||||
|
||||
pixman_transform_init_identity (&transform);
|
||||
|
||||
pixman_transform_translate (NULL, &transform,
|
||||
pixman_double_to_fixed (0.5),
|
||||
pixman_double_to_fixed (0.5));
|
||||
|
||||
pixman_transform_scale (NULL, &transform,
|
||||
pixman_double_to_fixed (SIZE),
|
||||
pixman_double_to_fixed (SIZE));
|
||||
pixman_transform_translate (NULL, &transform,
|
||||
pixman_double_to_fixed (0.5),
|
||||
pixman_double_to_fixed (0.5));
|
||||
|
||||
for (i = 0; i < NUM_GRADIENTS; i++)
|
||||
{
|
||||
int column = i % GRADIENTS_PER_ROW;
|
||||
int row = i / GRADIENTS_PER_ROW;
|
||||
|
||||
src_img = create_conical (i);
|
||||
pixman_image_set_repeat (src_img, PIXMAN_REPEAT_NORMAL);
|
||||
|
||||
pixman_image_set_transform (src_img, &transform);
|
||||
|
||||
pixman_image_composite32 (
|
||||
PIXMAN_OP_OVER, src_img, NULL,dest_img,
|
||||
0, 0, 0, 0, column * SIZE, row * SIZE,
|
||||
SIZE, SIZE);
|
||||
|
||||
pixman_image_unref (src_img);
|
||||
}
|
||||
|
||||
show_image (dest_img);
|
||||
|
||||
pixman_image_unref (dest_img);
|
||||
|
||||
return 0;
|
||||
}
|
@ -1,47 +0,0 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "pixman.h"
|
||||
#include "gtk-utils.h"
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
#define WIDTH 200
|
||||
#define HEIGHT 200
|
||||
|
||||
#define d2f pixman_double_to_fixed
|
||||
|
||||
uint32_t *src = malloc (WIDTH * HEIGHT * 4);
|
||||
uint32_t *mask = malloc (WIDTH * HEIGHT * 4);
|
||||
uint32_t *dest = malloc (WIDTH * HEIGHT * 4);
|
||||
pixman_fixed_t convolution[] =
|
||||
{
|
||||
d2f (3), d2f (3),
|
||||
d2f (0.5), d2f (0.5), d2f (0.5),
|
||||
d2f (0.5), d2f (0.5), d2f (0.5),
|
||||
d2f (0.5), d2f (0.5), d2f (0.5),
|
||||
};
|
||||
pixman_image_t *simg, *mimg, *dimg;
|
||||
|
||||
int i;
|
||||
|
||||
for (i = 0; i < WIDTH * HEIGHT; ++i)
|
||||
{
|
||||
src[i] = 0x7f007f00;
|
||||
mask[i] = (i % 256) * 0x01000000;
|
||||
dest[i] = 0;
|
||||
}
|
||||
|
||||
simg = pixman_image_create_bits (PIXMAN_a8r8g8b8, WIDTH, HEIGHT, src, WIDTH * 4);
|
||||
mimg = pixman_image_create_bits (PIXMAN_a8r8g8b8, WIDTH, HEIGHT, mask, WIDTH * 4);
|
||||
dimg = pixman_image_create_bits (PIXMAN_a8r8g8b8, WIDTH, HEIGHT, dest, WIDTH * 4);
|
||||
|
||||
pixman_image_set_filter (mimg, PIXMAN_FILTER_CONVOLUTION,
|
||||
convolution, 11);
|
||||
|
||||
pixman_image_composite (PIXMAN_OP_OVER, simg, mimg, dimg, 0, 0, 0, 0, 0, 0, WIDTH, HEIGHT);
|
||||
|
||||
show_image (dimg);
|
||||
|
||||
return 0;
|
||||
}
|
277
demos/dither.c
277
demos/dither.c
@ -1,277 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012, Red Hat, Inc.
|
||||
* Copyright 2012, Soren Sandmann
|
||||
* Copyright 2018, Basile Clement
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the next
|
||||
* paragraph) shall be included in all copies or substantial portions of the
|
||||
* Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "pixman-config.h"
|
||||
#endif
|
||||
#include <math.h>
|
||||
#include <gtk/gtk.h>
|
||||
#include <stdlib.h>
|
||||
#include "utils.h"
|
||||
#include "gtk-utils.h"
|
||||
|
||||
#define WIDTH 1024
|
||||
#define HEIGHT 640
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GtkBuilder * builder;
|
||||
pixman_image_t * original;
|
||||
pixman_format_code_t format;
|
||||
pixman_dither_t dither;
|
||||
int width;
|
||||
int height;
|
||||
} app_t;
|
||||
|
||||
static GtkWidget *
|
||||
get_widget (app_t *app, const char *name)
|
||||
{
|
||||
GtkWidget *widget = GTK_WIDGET (gtk_builder_get_object (app->builder, name));
|
||||
|
||||
if (!widget)
|
||||
g_error ("Widget %s not found\n", name);
|
||||
|
||||
return widget;
|
||||
}
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char name [20];
|
||||
int value;
|
||||
} named_int_t;
|
||||
|
||||
static const named_int_t formats[] =
|
||||
{
|
||||
{ "a8r8g8b8", PIXMAN_a8r8g8b8 },
|
||||
{ "rgb", PIXMAN_rgb_float },
|
||||
{ "sRGB", PIXMAN_a8r8g8b8_sRGB },
|
||||
{ "r5g6b5", PIXMAN_r5g6b5 },
|
||||
{ "a4r4g4b4", PIXMAN_a4r4g4b4 },
|
||||
{ "a2r2g2b2", PIXMAN_a2r2g2b2 },
|
||||
{ "r3g3b2", PIXMAN_r3g3b2 },
|
||||
{ "r1g2b1", PIXMAN_r1g2b1 },
|
||||
{ "a1r1g1b1", PIXMAN_a1r1g1b1 },
|
||||
};
|
||||
|
||||
static const named_int_t dithers[] =
|
||||
{
|
||||
{ "None", PIXMAN_REPEAT_NONE },
|
||||
{ "Bayer 8x8", PIXMAN_DITHER_ORDERED_BAYER_8 },
|
||||
{ "Blue noise 64x64", PIXMAN_DITHER_ORDERED_BLUE_NOISE_64 },
|
||||
};
|
||||
|
||||
static int
|
||||
get_value (app_t *app, const named_int_t table[], const char *box_name)
|
||||
{
|
||||
GtkComboBox *box = GTK_COMBO_BOX (get_widget (app, box_name));
|
||||
|
||||
return table[gtk_combo_box_get_active (box)].value;
|
||||
}
|
||||
|
||||
static void
|
||||
rescale (GtkWidget *may_be_null, app_t *app)
|
||||
{
|
||||
app->dither = get_value (app, dithers, "dithering_combo_box");
|
||||
app->format = get_value (app, formats, "target_format_combo_box");
|
||||
|
||||
gtk_widget_set_size_request (
|
||||
get_widget (app, "drawing_area"), app->width + 0.5, app->height + 0.5);
|
||||
|
||||
gtk_widget_queue_draw (
|
||||
get_widget (app, "drawing_area"));
|
||||
}
|
||||
|
||||
static gboolean
|
||||
on_draw (GtkWidget *widget, cairo_t *cr, gpointer user_data)
|
||||
{
|
||||
app_t *app = user_data;
|
||||
GdkRectangle area;
|
||||
cairo_surface_t *surface;
|
||||
pixman_image_t *tmp, *final;
|
||||
uint32_t *pixels;
|
||||
|
||||
gdk_cairo_get_clip_rectangle(cr, &area);
|
||||
|
||||
tmp = pixman_image_create_bits (
|
||||
app->format, area.width, area.height, NULL, 0);
|
||||
pixman_image_set_dither (tmp, app->dither);
|
||||
|
||||
pixman_image_composite (
|
||||
PIXMAN_OP_SRC,
|
||||
app->original, NULL, tmp,
|
||||
area.x, area.y, 0, 0, 0, 0,
|
||||
app->width - area.x,
|
||||
app->height - area.y);
|
||||
|
||||
pixels = calloc (1, area.width * area.height * 4);
|
||||
final = pixman_image_create_bits (
|
||||
PIXMAN_a8r8g8b8, area.width, area.height, pixels, area.width * 4);
|
||||
|
||||
pixman_image_composite (
|
||||
PIXMAN_OP_SRC,
|
||||
tmp, NULL, final,
|
||||
area.x, area.y, 0, 0, 0, 0,
|
||||
app->width - area.x,
|
||||
app->height - area.y);
|
||||
|
||||
surface = cairo_image_surface_create_for_data (
|
||||
(uint8_t *)pixels, CAIRO_FORMAT_ARGB32,
|
||||
area.width, area.height, area.width * 4);
|
||||
|
||||
cairo_set_source_surface (cr, surface, area.x, area.y);
|
||||
|
||||
cairo_paint (cr);
|
||||
|
||||
cairo_surface_destroy (surface);
|
||||
free (pixels);
|
||||
pixman_image_unref (final);
|
||||
pixman_image_unref (tmp);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
set_up_combo_box (app_t *app, const char *box_name,
|
||||
int n_entries, const named_int_t table[])
|
||||
{
|
||||
GtkWidget *widget = get_widget (app, box_name);
|
||||
GtkListStore *model;
|
||||
GtkCellRenderer *cell;
|
||||
int i;
|
||||
|
||||
model = gtk_list_store_new (1, G_TYPE_STRING);
|
||||
|
||||
cell = gtk_cell_renderer_text_new ();
|
||||
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (widget), cell, TRUE);
|
||||
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (widget), cell,
|
||||
"text", 0,
|
||||
NULL);
|
||||
|
||||
gtk_combo_box_set_model (GTK_COMBO_BOX (widget), GTK_TREE_MODEL (model));
|
||||
|
||||
for (i = 0; i < n_entries; ++i)
|
||||
{
|
||||
const named_int_t *info = &(table[i]);
|
||||
GtkTreeIter iter;
|
||||
|
||||
gtk_list_store_append (model, &iter);
|
||||
gtk_list_store_set (model, &iter, 0, info->name, -1);
|
||||
}
|
||||
|
||||
gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 0);
|
||||
|
||||
g_signal_connect (widget, "changed", G_CALLBACK (rescale), app);
|
||||
}
|
||||
|
||||
static app_t *
|
||||
app_new (pixman_image_t *original)
|
||||
{
|
||||
GtkWidget *widget;
|
||||
app_t *app = g_malloc (sizeof *app);
|
||||
GError *err = NULL;
|
||||
|
||||
app->builder = gtk_builder_new ();
|
||||
app->original = original;
|
||||
|
||||
if (original->type == BITS)
|
||||
{
|
||||
app->width = pixman_image_get_width (original);
|
||||
app->height = pixman_image_get_height (original);
|
||||
}
|
||||
else
|
||||
{
|
||||
app->width = WIDTH;
|
||||
app->height = HEIGHT;
|
||||
}
|
||||
|
||||
if (!gtk_builder_add_from_file (app->builder, "dither.ui", &err))
|
||||
g_error ("Could not read file dither.ui: %s", err->message);
|
||||
|
||||
widget = get_widget (app, "drawing_area");
|
||||
g_signal_connect (widget, "draw", G_CALLBACK (on_draw), app);
|
||||
|
||||
set_up_combo_box (app, "target_format_combo_box",
|
||||
G_N_ELEMENTS (formats), formats);
|
||||
set_up_combo_box (app, "dithering_combo_box",
|
||||
G_N_ELEMENTS (dithers), dithers);
|
||||
|
||||
app->dither = get_value (app, dithers, "dithering_combo_box");
|
||||
app->format = get_value (app, formats, "target_format_combo_box");
|
||||
|
||||
rescale (NULL, app);
|
||||
|
||||
return app;
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
GtkWidget *window;
|
||||
pixman_image_t *image;
|
||||
app_t *app;
|
||||
|
||||
gtk_init (&argc, &argv);
|
||||
|
||||
if (argc < 2)
|
||||
{
|
||||
pixman_gradient_stop_t stops[] = {
|
||||
/* These colors make it very obvious that dithering
|
||||
* is useful even for 8-bit gradients
|
||||
*/
|
||||
{ 0x00000, { 0x1b1b, 0x5d5d, 0x7c7c, 0xffff } },
|
||||
{ 0x10000, { 0x3838, 0x3232, 0x1010, 0xffff } },
|
||||
};
|
||||
pixman_point_fixed_t p1, p2;
|
||||
|
||||
p1.x = p1.y = 0x0000;
|
||||
p2.x = WIDTH << 16;
|
||||
p2.y = HEIGHT << 16;
|
||||
|
||||
if (!(image = pixman_image_create_linear_gradient (
|
||||
&p1, &p2, stops, ARRAY_LENGTH (stops))))
|
||||
{
|
||||
printf ("Could not create gradient\n");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
else if (!(image = pixman_image_from_file (argv[1], PIXMAN_a8r8g8b8)))
|
||||
{
|
||||
printf ("Could not load image \"%s\"\n", argv[1]);
|
||||
return -1;
|
||||
}
|
||||
|
||||
app = app_new (image);
|
||||
|
||||
window = get_widget (app, "main");
|
||||
|
||||
g_signal_connect (window, "delete_event", G_CALLBACK (gtk_main_quit), NULL);
|
||||
|
||||
gtk_window_set_default_size (GTK_WINDOW (window), 1024, 768);
|
||||
|
||||
gtk_widget_show_all (window);
|
||||
|
||||
gtk_main ();
|
||||
|
||||
return 0;
|
||||
}
|
147
demos/dither.ui
147
demos/dither.ui
@ -1,147 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<requires lib="gtk+" version="2.12"/>
|
||||
<object class="GtkWindow" id="main">
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHBox" id="u">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">12</property>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow" id="scrolledwindow1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="shadow_type">in</property>
|
||||
<child>
|
||||
<object class="GtkViewport" id="viewport1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkDrawingArea" id="drawing_area">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkVBox" id="box1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">12</property>
|
||||
<child>
|
||||
<object class="GtkVBox" id="box6">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkTable" id="grid1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="n_rows">2</property>
|
||||
<property name="n_columns">2</property>
|
||||
<property name="column_spacing">8</property>
|
||||
<property name="row_spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label4">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes"><b>Target format:</b></property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="xalign">1</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label5">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes"><b>Dithering:</b></property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="xalign">1</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="target_format_combo_box">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="dithering_combo_box">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="padding">6</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="rotate_adjustment">
|
||||
<property name="lower">-180</property>
|
||||
<property name="upper">190</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
<property name="page_size">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="scale_x_adjustment">
|
||||
<property name="lower">-32</property>
|
||||
<property name="upper">42</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
<property name="page_size">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="scale_y_adjustment">
|
||||
<property name="lower">-32</property>
|
||||
<property name="upper">42</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
<property name="page_size">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="subsample_adjustment">
|
||||
<property name="upper">12</property>
|
||||
<property name="value">4</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">1</property>
|
||||
</object>
|
||||
</interface>
|
@ -1,92 +0,0 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "pixman.h"
|
||||
#include "gtk-utils.h"
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
#define WIDTH 400
|
||||
#define HEIGHT 200
|
||||
|
||||
uint32_t *dest = malloc (WIDTH * HEIGHT * 4);
|
||||
pixman_image_t *src_img;
|
||||
pixman_image_t *dest_img;
|
||||
int i;
|
||||
pixman_gradient_stop_t stops[2] =
|
||||
{
|
||||
{ pixman_int_to_fixed (0), { 0x0000, 0x0000, 0xffff, 0xffff } },
|
||||
{ pixman_int_to_fixed (1), { 0xffff, 0x1111, 0x1111, 0xffff } }
|
||||
};
|
||||
pixman_point_fixed_t p1 = { pixman_double_to_fixed (50), 0 };
|
||||
pixman_point_fixed_t p2 = { pixman_double_to_fixed (200), 0 };
|
||||
#if 0
|
||||
pixman_transform_t trans = {
|
||||
{ { pixman_double_to_fixed (2), pixman_double_to_fixed (0.5), pixman_double_to_fixed (-100), },
|
||||
{ pixman_double_to_fixed (0), pixman_double_to_fixed (3), pixman_double_to_fixed (0), },
|
||||
{ pixman_double_to_fixed (0), pixman_double_to_fixed (0.000), pixman_double_to_fixed (1.0) }
|
||||
}
|
||||
};
|
||||
#else
|
||||
pixman_transform_t trans = {
|
||||
{ { pixman_fixed_1, 0, 0 },
|
||||
{ 0, pixman_fixed_1, 0 },
|
||||
{ 0, 0, pixman_fixed_1 } }
|
||||
};
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
pixman_point_fixed_t c_inner;
|
||||
pixman_point_fixed_t c_outer;
|
||||
pixman_fixed_t r_inner;
|
||||
pixman_fixed_t r_outer;
|
||||
#endif
|
||||
|
||||
for (i = 0; i < WIDTH * HEIGHT; ++i)
|
||||
dest[i] = 0xff00ff00;
|
||||
|
||||
dest_img = pixman_image_create_bits (PIXMAN_a8r8g8b8,
|
||||
WIDTH, HEIGHT,
|
||||
dest,
|
||||
WIDTH * 4);
|
||||
|
||||
#if 0
|
||||
c_inner.x = pixman_double_to_fixed (50.0);
|
||||
c_inner.y = pixman_double_to_fixed (50.0);
|
||||
c_outer.x = pixman_double_to_fixed (50.0);
|
||||
c_outer.y = pixman_double_to_fixed (50.0);
|
||||
r_inner = 0;
|
||||
r_outer = pixman_double_to_fixed (50.0);
|
||||
|
||||
src_img = pixman_image_create_conical_gradient (&c_inner, r_inner,
|
||||
stops, 2);
|
||||
#endif
|
||||
#if 0
|
||||
src_img = pixman_image_create_conical_gradient (&c_inner, r_inner,
|
||||
stops, 2);
|
||||
src_img = pixman_image_create_linear_gradient (&c_inner, &c_outer,
|
||||
r_inner, r_outer,
|
||||
stops, 2);
|
||||
#endif
|
||||
|
||||
src_img = pixman_image_create_linear_gradient (&p1, &p2,
|
||||
stops, 2);
|
||||
|
||||
pixman_image_set_transform (src_img, &trans);
|
||||
pixman_image_set_repeat (src_img, PIXMAN_REPEAT_NONE);
|
||||
|
||||
pixman_image_composite (PIXMAN_OP_OVER, src_img, NULL, dest_img,
|
||||
0, 0, 0, 0, 0, 0, 10 * WIDTH, HEIGHT);
|
||||
|
||||
printf ("0, 0: %x\n", dest[0]);
|
||||
printf ("10, 10: %x\n", dest[10 * 10 + 10]);
|
||||
printf ("w, h: %x\n", dest[(HEIGHT - 1) * 100 + (WIDTH - 1)]);
|
||||
|
||||
show_image (dest_img);
|
||||
|
||||
pixman_image_unref (src_img);
|
||||
pixman_image_unref (dest_img);
|
||||
free (dest);
|
||||
|
||||
return 0;
|
||||
}
|
@ -1,177 +0,0 @@
|
||||
#include <gtk/gtk.h>
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <pixman-config.h>
|
||||
#endif
|
||||
#include "utils.h"
|
||||
#include "gtk-utils.h"
|
||||
|
||||
pixman_image_t *
|
||||
pixman_image_from_file (const char *filename, pixman_format_code_t format)
|
||||
{
|
||||
GdkPixbuf *pixbuf;
|
||||
pixman_image_t *image;
|
||||
int width, height;
|
||||
uint32_t *data, *d;
|
||||
uint8_t *gdk_data;
|
||||
int n_channels;
|
||||
int j, i;
|
||||
int stride;
|
||||
|
||||
if (!(pixbuf = gdk_pixbuf_new_from_file (filename, NULL)))
|
||||
return NULL;
|
||||
|
||||
image = NULL;
|
||||
|
||||
width = gdk_pixbuf_get_width (pixbuf);
|
||||
height = gdk_pixbuf_get_height (pixbuf);
|
||||
n_channels = gdk_pixbuf_get_n_channels (pixbuf);
|
||||
gdk_data = gdk_pixbuf_get_pixels (pixbuf);
|
||||
stride = gdk_pixbuf_get_rowstride (pixbuf);
|
||||
|
||||
if (!(data = malloc (width * height * sizeof (uint32_t))))
|
||||
goto out;
|
||||
|
||||
d = data;
|
||||
for (j = 0; j < height; ++j)
|
||||
{
|
||||
uint8_t *gdk_line = gdk_data;
|
||||
|
||||
for (i = 0; i < width; ++i)
|
||||
{
|
||||
int r, g, b, a;
|
||||
uint32_t pixel;
|
||||
|
||||
r = gdk_line[0];
|
||||
g = gdk_line[1];
|
||||
b = gdk_line[2];
|
||||
|
||||
if (n_channels == 4)
|
||||
a = gdk_line[3];
|
||||
else
|
||||
a = 0xff;
|
||||
|
||||
r = (r * a + 127) / 255;
|
||||
g = (g * a + 127) / 255;
|
||||
b = (b * a + 127) / 255;
|
||||
|
||||
pixel = (a << 24) | (r << 16) | (g << 8) | b;
|
||||
|
||||
*d++ = pixel;
|
||||
gdk_line += n_channels;
|
||||
}
|
||||
|
||||
gdk_data += stride;
|
||||
}
|
||||
|
||||
image = pixman_image_create_bits (
|
||||
format, width, height, data, width * 4);
|
||||
|
||||
out:
|
||||
g_object_unref (pixbuf);
|
||||
return image;
|
||||
}
|
||||
|
||||
GdkPixbuf *
|
||||
pixbuf_from_argb32 (uint32_t *bits,
|
||||
int width,
|
||||
int height,
|
||||
int stride)
|
||||
{
|
||||
GdkPixbuf *pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE,
|
||||
8, width, height);
|
||||
int p_stride = gdk_pixbuf_get_rowstride (pixbuf);
|
||||
guint32 *p_bits = (guint32 *)gdk_pixbuf_get_pixels (pixbuf);
|
||||
int i;
|
||||
|
||||
for (i = 0; i < height; ++i)
|
||||
{
|
||||
uint32_t *src_row = &bits[i * (stride / 4)];
|
||||
uint32_t *dst_row = p_bits + i * (p_stride / 4);
|
||||
|
||||
a8r8g8b8_to_rgba_np (dst_row, src_row, width);
|
||||
}
|
||||
|
||||
return pixbuf;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
on_draw (GtkWidget *widget, cairo_t *cr, gpointer user_data)
|
||||
{
|
||||
pixman_image_t *pimage = user_data;
|
||||
int width = pixman_image_get_width (pimage);
|
||||
int height = pixman_image_get_height (pimage);
|
||||
int stride = pixman_image_get_stride (pimage);
|
||||
cairo_surface_t *cimage;
|
||||
cairo_format_t format;
|
||||
|
||||
if (pixman_image_get_format (pimage) == PIXMAN_x8r8g8b8)
|
||||
format = CAIRO_FORMAT_RGB24;
|
||||
else
|
||||
format = CAIRO_FORMAT_ARGB32;
|
||||
|
||||
cimage = cairo_image_surface_create_for_data (
|
||||
(uint8_t *)pixman_image_get_data (pimage),
|
||||
format, width, height, stride);
|
||||
|
||||
cairo_rectangle (cr, 0, 0, width, height);
|
||||
cairo_set_source_surface (cr, cimage, 0, 0);
|
||||
cairo_fill (cr);
|
||||
|
||||
cairo_surface_destroy (cimage);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
show_image (pixman_image_t *image)
|
||||
{
|
||||
GtkWidget *window;
|
||||
int width, height;
|
||||
int argc;
|
||||
char **argv;
|
||||
char *arg0 = g_strdup ("pixman-test-program");
|
||||
pixman_format_code_t format;
|
||||
pixman_image_t *copy;
|
||||
|
||||
argc = 1;
|
||||
argv = (char **)&arg0;
|
||||
|
||||
gtk_init (&argc, &argv);
|
||||
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
width = pixman_image_get_width (image);
|
||||
height = pixman_image_get_height (image);
|
||||
|
||||
gtk_window_set_default_size (GTK_WINDOW (window), width, height);
|
||||
|
||||
format = pixman_image_get_format (image);
|
||||
|
||||
/* We always display the image as if it contains sRGB data. That
|
||||
* means that no conversion should take place when the image
|
||||
* has the a8r8g8b8_sRGB format.
|
||||
*/
|
||||
switch (format)
|
||||
{
|
||||
case PIXMAN_a8r8g8b8_sRGB:
|
||||
case PIXMAN_a8r8g8b8:
|
||||
case PIXMAN_x8r8g8b8:
|
||||
copy = pixman_image_ref (image);
|
||||
break;
|
||||
|
||||
default:
|
||||
copy = pixman_image_create_bits (PIXMAN_a8r8g8b8,
|
||||
width, height, NULL, -1);
|
||||
pixman_image_composite32 (PIXMAN_OP_SRC,
|
||||
image, NULL, copy,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
width, height);
|
||||
break;
|
||||
}
|
||||
|
||||
g_signal_connect (window, "draw", G_CALLBACK (on_draw), copy);
|
||||
g_signal_connect (window, "delete_event", G_CALLBACK (gtk_main_quit), NULL);
|
||||
|
||||
gtk_widget_show (window);
|
||||
|
||||
gtk_main ();
|
||||
}
|
@ -1,15 +0,0 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <glib.h>
|
||||
#include <gtk/gtk.h>
|
||||
#include "pixman.h"
|
||||
|
||||
void show_image (pixman_image_t *image);
|
||||
|
||||
pixman_image_t *
|
||||
pixman_image_from_file (const char *filename, pixman_format_code_t format);
|
||||
|
||||
GdkPixbuf *pixbuf_from_argb32 (uint32_t *bits,
|
||||
int width,
|
||||
int height,
|
||||
int stride);
|
@ -1,50 +0,0 @@
|
||||
#include "utils.h"
|
||||
#include "gtk-utils.h"
|
||||
|
||||
#define WIDTH 1024
|
||||
#define HEIGHT 640
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
pixman_image_t *src_img, *dest_img;
|
||||
pixman_gradient_stop_t stops[] = {
|
||||
{ 0x00000, { 0x0000, 0x0000, 0x4444, 0xdddd } },
|
||||
{ 0x10000, { 0xeeee, 0xeeee, 0x8888, 0xdddd } },
|
||||
#if 0
|
||||
/* These colors make it very obvious that dithering
|
||||
* is useful even for 8-bit gradients
|
||||
*/
|
||||
{ 0x00000, { 0x6666, 0x3333, 0x3333, 0xffff } },
|
||||
{ 0x10000, { 0x3333, 0x6666, 0x6666, 0xffff } },
|
||||
#endif
|
||||
};
|
||||
pixman_point_fixed_t p1, p2;
|
||||
|
||||
enable_divbyzero_exceptions ();
|
||||
|
||||
dest_img = pixman_image_create_bits (PIXMAN_x8r8g8b8,
|
||||
WIDTH, HEIGHT,
|
||||
NULL, 0);
|
||||
|
||||
p1.x = p1.y = 0x0000;
|
||||
p2.x = WIDTH << 16;
|
||||
p2.y = HEIGHT << 16;
|
||||
|
||||
src_img = pixman_image_create_linear_gradient (&p1, &p2, stops, ARRAY_LENGTH (stops));
|
||||
|
||||
pixman_image_composite32 (PIXMAN_OP_OVER,
|
||||
src_img,
|
||||
NULL,
|
||||
dest_img,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
WIDTH, HEIGHT);
|
||||
|
||||
show_image (dest_img);
|
||||
|
||||
pixman_image_unref (dest_img);
|
||||
|
||||
return 0;
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user