Skip to content

Commit

Permalink
missing files
Browse files Browse the repository at this point in the history
  • Loading branch information
SolDev69 committed Dec 28, 2023
1 parent 10da4b3 commit 7468477
Show file tree
Hide file tree
Showing 88 changed files with 21,524 additions and 0 deletions.
67 changes: 67 additions & 0 deletions .github/workflows/android.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
name: Build Android

on:
[push, pull_request]

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
build:
strategy:
matrix:
arch: [ "arm32", "aarch64" ]
fail-fast: false

name: "Build for ${{matrix.arch}}"

runs-on: ubuntu-latest

steps:

- uses: actions/checkout@v2

- name: Build
run: |
sudo apt update
sudo apt install -y meson libxrandr-dev libxxf86vm-dev libxcb-*-dev libx11-xcb-dev libxfixes-dev libdrm-dev libx11-dev
pip3 install mako
export ANDROID_NDK_HOME="$ANDROID_SDK_ROOT/ndk-bundle"
envsubst <android-drm-${{matrix.arch}} >build-crossfile-drm
git clone --depth 1 https://gitlab.freedesktop.org/mesa/drm.git
cd drm
meson setup "build-android" \
--prefix=/tmp/drm-static \
--cross-file "../build-crossfile-drm" \
-Ddefault_library=static \
-Dintel=disabled \
-Dradeon=disabled \
-Damdgpu=disabled \
-Dnouveau=disabled \
-Dvmwgfx=disabled \
-Dfreedreno=disabled \
-Dvc4=disabled \
-Detnaviv=disabled
ninja -C "build-android" install
cd ..
envsubst <android-${{matrix.arch}} >build-crossfile
meson setup "build-android" \
--prefix=/tmp/pan \
--cross-file "build-crossfile" \
-Dplatforms=android \
-Dplatform-sdk-version=26 \
-Dandroid-stub=true \
-Dllvm=disabled \
-Dxlib-lease=disabled \
-Degl=disabled \
-Dgbm=disabled \
-Dglx=disabled \
-Dopengl=true \
-Dosmesa=true \
-Dvulkan-drivers= \
-Dgallium-drivers=swrast,panfrost \
-Dshared-glapi=false
ninja -C "build-android" install
- name: Upload libraries
uses: actions/upload-artifact@v2
with:
name: panfrost_${{matrix.arch}}
path: /tmp/pan
88 changes: 88 additions & 0 deletions README-CSF.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
Valhall CSF Tests
=================

The ``csf`` branch contains a test program for v10 Valhall GPUs (G710
etc.) which uses the Arm ``kbase`` kernel driver, which is generally
present on vendor kernels but is not in the upstream Linux kernel.

However, the kernel driver source can also be downloaded `from Arm
<https://developer.arm.com/downloads/-/mali-drivers/valhall-kernel>`_,
of which the newer releases should work well enough with a mainline
kernel (though some work may be needed to integrate the vendor
platform).

Making sure that the ``libmali`` blob drivers work before trying this
program is recommended, otherwise you will be trying to debug
userspace and kernel bugs at the same time.

Note that firmware is required for these GPUs, for RK3588 try
downloading the file from the Rockchip `libmali
<https://github.com/JeffyCN/rockchip_mirrors/tree/libmali/firmware/g610>`_
repo, and placing it in ``/lib/firmware/``.

Compiling
---------

.. code-block:: sh
$ mkdir build
$ cd build
$ meson --buildtype=debug -Dgallium-drivers=panfrost -Dvulkan-drivers=
$ ninja src/panfrost/csf_test
Running
-------

.. code-block:: sh
$ src/panfrost/csf_test
will run the tests.

Normally it will start running cleanup steps as soon as one test
fails, though setting the environment variable ``TEST_KEEP_GOING=1``
will change this behaviour.

Test failures
-------------

Gitlab issues can be created against `my repo
<https://gitlab.freedesktop.org/icecream95/mesa/-/issues>`_, though
some problems should be easy to fix (wrong permissions on
``/dev/mali0``?).

Include all output from running the test program. Including logs from
``strace`` might also help.

Command stream test script
--------------------------

``src/panfrost/csf_test/interpret.py`` is a test script for assembling
and executing command streams.

To use it, symlink the ``csf_test`` binary into ``$PATH`` and optionally
also write a ``rebuild-mesa`` script which recompiles ``csf_test``.

Then running ``interpret.py`` will execute the ``cmds`` variable,
which is defined inside the script file.

Example:

.. code-block:: txt
@ comments are started with '@'
@ run on command stream 2
!cs 2
@ allocate some memory
!alloc x 4096
@ allocate event memory, for evstr instructions
!alloc ev 4096 0x8200f
mov x50, $x
@ dump all registers to the memory starting at x50
regdump x50
@ dump the memory region named 'x'
!dump x 0 4096
10 changes: 10 additions & 0 deletions docs/features.txt.rej
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
diff a/docs/features.txt b/docs/features.txt (rejected hunks)
@@ -213,7 +213,7 @@ GL 4.4, GLSL 4.40 -- all DONE: freedreno/a6xx, i965/gen8+, nvc0, r600, radeonsi,
GL 4.5, GLSL 4.50 -- all DONE: freedreno/a6xx, nvc0, r600, radeonsi, llvmpipe, zink

GL_ARB_ES3_1_compatibility DONE (freedreno/a6xx, i965/hsw+, softpipe, virgl)
- GL_ARB_clip_control DONE (freedreno, i965, nv50, softpipe, virgl, lima, d3d12)
+ GL_ARB_clip_control DONE (freedreno, i965, nv50, softpipe, virgl, lima, d3d12, panfrost)
GL_ARB_conditional_render_inverted DONE (freedreno, i965, nv50, softpipe, virgl, panfrost, d3d12)
GL_ARB_cull_distance DONE (freedreno/a6xx, i965, nv50, softpipe, virgl)
GL_ARB_derivative_control DONE (freedreno/a3xx+, i965, nv50, softpipe, virgl)
182 changes: 182 additions & 0 deletions include/dma-uapi/dma-buf.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,182 @@
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
/*
* Framework for buffer objects that can be shared across devices/subsystems.
*
* Copyright(C) 2015 Intel Ltd
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published by
* the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef _DMA_BUF_UAPI_H_
#define _DMA_BUF_UAPI_H_

#include <linux/types.h>

/**
* struct dma_buf_sync - Synchronize with CPU access.
*
* When a DMA buffer is accessed from the CPU via mmap, it is not always
* possible to guarantee coherency between the CPU-visible map and underlying
* memory. To manage coherency, DMA_BUF_IOCTL_SYNC must be used to bracket
* any CPU access to give the kernel the chance to shuffle memory around if
* needed.
*
* Prior to accessing the map, the client must call DMA_BUF_IOCTL_SYNC
* with DMA_BUF_SYNC_START and the appropriate read/write flags. Once the
* access is complete, the client should call DMA_BUF_IOCTL_SYNC with
* DMA_BUF_SYNC_END and the same read/write flags.
*
* The synchronization provided via DMA_BUF_IOCTL_SYNC only provides cache
* coherency. It does not prevent other processes or devices from
* accessing the memory at the same time. If synchronization with a GPU or
* other device driver is required, it is the client's responsibility to
* wait for buffer to be ready for reading or writing before calling this
* ioctl with DMA_BUF_SYNC_START. Likewise, the client must ensure that
* follow-up work is not submitted to GPU or other device driver until
* after this ioctl has been called with DMA_BUF_SYNC_END?
*
* If the driver or API with which the client is interacting uses implicit
* synchronization, waiting for prior work to complete can be done via
* poll() on the DMA buffer file descriptor. If the driver or API requires
* explicit synchronization, the client may have to wait on a sync_file or
* other synchronization primitive outside the scope of the DMA buffer API.
*/
struct dma_buf_sync {
/**
* @flags: Set of access flags
*
* DMA_BUF_SYNC_START:
* Indicates the start of a map access session.
*
* DMA_BUF_SYNC_END:
* Indicates the end of a map access session.
*
* DMA_BUF_SYNC_READ:
* Indicates that the mapped DMA buffer will be read by the
* client via the CPU map.
*
* DMA_BUF_SYNC_WRITE:
* Indicates that the mapped DMA buffer will be written by the
* client via the CPU map.
*
* DMA_BUF_SYNC_RW:
* An alias for DMA_BUF_SYNC_READ | DMA_BUF_SYNC_WRITE.
*/
__u64 flags;
};

#define DMA_BUF_SYNC_READ (1 << 0)
#define DMA_BUF_SYNC_WRITE (2 << 0)
#define DMA_BUF_SYNC_RW (DMA_BUF_SYNC_READ | DMA_BUF_SYNC_WRITE)
#define DMA_BUF_SYNC_START (0 << 2)
#define DMA_BUF_SYNC_END (1 << 2)
#define DMA_BUF_SYNC_VALID_FLAGS_MASK \
(DMA_BUF_SYNC_RW | DMA_BUF_SYNC_END)

#define DMA_BUF_NAME_LEN 32

/**
* struct dma_buf_export_sync_file - Get a sync_file from a dma-buf
*
* Userspace can perform a DMA_BUF_IOCTL_EXPORT_SYNC_FILE to retrieve the
* current set of fences on a dma-buf file descriptor as a sync_file. CPU
* waits via poll() or other driver-specific mechanisms typically wait on
* whatever fences are on the dma-buf at the time the wait begins. This
* is similar except that it takes a snapshot of the current fences on the
* dma-buf for waiting later instead of waiting immediately. This is
* useful for modern graphics APIs such as Vulkan which assume an explicit
* synchronization model but still need to inter-operate with dma-buf.
*
* The intended usage pattern is the following:
*
* 1. Export a sync_file with flags corresponding to the expected GPU usage
* via DMA_BUF_IOCTL_EXPORT_SYNC_FILE.
*
* 2. Submit rendering work which uses the dma-buf. The work should wait on
* the exported sync file before rendering and produce another sync_file
* when complete.
*
* 3. Import the rendering-complete sync_file into the dma-buf with flags
* corresponding to the GPU usage via DMA_BUF_IOCTL_IMPORT_SYNC_FILE.
*
* Unlike doing implicit synchronization via a GPU kernel driver's exec ioctl,
* the above is not a single atomic operation. If userspace wants to ensure
* ordering via these fences, it is the respnosibility of userspace to use
* locks or other mechanisms to ensure that no other context adds fences or
* submits work between steps 1 and 3 above.
*/
struct dma_buf_export_sync_file {
/**
* @flags: Read/write flags
*
* Must be DMA_BUF_SYNC_READ, DMA_BUF_SYNC_WRITE, or both.
*
* If DMA_BUF_SYNC_READ is set and DMA_BUF_SYNC_WRITE is not set,
* the returned sync file waits on any writers of the dma-buf to
* complete. Waiting on the returned sync file is equivalent to
* poll() with POLLIN.
*
* If DMA_BUF_SYNC_WRITE is set, the returned sync file waits on
* any users of the dma-buf (read or write) to complete. Waiting
* on the returned sync file is equivalent to poll() with POLLOUT.
* If both DMA_BUF_SYNC_WRITE and DMA_BUF_SYNC_READ are set, this
* is equivalent to just DMA_BUF_SYNC_WRITE.
*/
__u32 flags;
/** @fd: Returned sync file descriptor */
__s32 fd;
};

/**
* struct dma_buf_import_sync_file - Insert a sync_file into a dma-buf
*
* Userspace can perform a DMA_BUF_IOCTL_IMPORT_SYNC_FILE to insert a
* sync_file into a dma-buf for the purposes of implicit synchronization
* with other dma-buf consumers. This allows clients using explicitly
* synchronized APIs such as Vulkan to inter-op with dma-buf consumers
* which expect implicit synchronization such as OpenGL or most media
* drivers/video.
*/
struct dma_buf_import_sync_file {
/**
* @flags: Read/write flags
*
* Must be DMA_BUF_SYNC_READ, DMA_BUF_SYNC_WRITE, or both.
*
* If DMA_BUF_SYNC_READ is set and DMA_BUF_SYNC_WRITE is not set,
* this inserts the sync_file as a read-only fence. Any subsequent
* implicitly synchronized writes to this dma-buf will wait on this
* fence but reads will not.
*
* If DMA_BUF_SYNC_WRITE is set, this inserts the sync_file as a
* write fence. All subsequent implicitly synchronized access to
* this dma-buf will wait on this fence.
*/
__u32 flags;
/** @fd: Sync file descriptor */
__s32 fd;
};

#define DMA_BUF_BASE 'b'
#define DMA_BUF_IOCTL_SYNC _IOW(DMA_BUF_BASE, 0, struct dma_buf_sync)

/* 32/64bitness of this uapi was botched in android, there's no difference
* between them in actual uapi, they're just different numbers.
*/
#define DMA_BUF_SET_NAME _IOW(DMA_BUF_BASE, 1, const char *)
#define DMA_BUF_SET_NAME_A _IOW(DMA_BUF_BASE, 1, __u32)
#define DMA_BUF_SET_NAME_B _IOW(DMA_BUF_BASE, 1, __u64)
#define DMA_BUF_IOCTL_EXPORT_SYNC_FILE _IOWR(DMA_BUF_BASE, 2, struct dma_buf_export_sync_file)
#define DMA_BUF_IOCTL_IMPORT_SYNC_FILE _IOW(DMA_BUF_BASE, 3, struct dma_buf_import_sync_file)

#endif
18 changes: 18 additions & 0 deletions meson.build.rej
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
diff a/meson.build b/meson.build (rejected hunks)
@@ -865,14 +865,13 @@ endif

with_gallium_st_nine = get_option('gallium-nine')
if with_gallium_st_nine
- if not with_gallium_softpipe
- error('The nine state tracker requires gallium softpipe/llvmpipe.')
- elif not [
+ if not [
with_gallium_crocus,
with_gallium_freedreno,
with_gallium_i915,
with_gallium_iris,
with_gallium_nouveau,
+ with_gallium_panfrost,
with_gallium_r300,
with_gallium_r600,
with_gallium_radeonsi,
10 changes: 10 additions & 0 deletions src/android_stub/meson.build.rej
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
diff a/src/android_stub/meson.build b/src/android_stub/meson.build (rejected hunks)
@@ -1,7 +1,7 @@
if with_android_stub
stub_libs = []

- foreach lib : ['backtrace', 'cutils', 'hardware', 'log', 'nativewindow', 'sync']
+ foreach lib : ['hardware', 'log', 'nativewindow']
stub_libs += shared_library(
lib,
files(lib + '_stub.cpp'),
Loading

0 comments on commit 7468477

Please sign in to comment.