* [igt-dev] [PATCH i-g-t 0/3] Switch the FFT library from GSL to meow_fft
@ 2022-08-09 12:17 Ryszard Knop
2022-08-09 12:17 ` [igt-dev] [PATCH i-g-t 1/3] lib/uwildmat: Move to a dedicated vendored library directory Ryszard Knop
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: Ryszard Knop @ 2022-08-09 12:17 UTC (permalink / raw)
To: Development mailing list for IGT GPU Tools
In Chamelium tests, FFT is used to compare the transmitted vs received
signal. Currently this is done with the GNU GSL library.
GSL is available under the GPL license which is incompatible with MIT,
as noted in #38. Switch to meow_fft, licensed under 0-clause BSD.
^ permalink raw reply [flat|nested] 7+ messages in thread
* [igt-dev] [PATCH i-g-t 1/3] lib/uwildmat: Move to a dedicated vendored library directory
2022-08-09 12:17 [igt-dev] [PATCH i-g-t 0/3] Switch the FFT library from GSL to meow_fft Ryszard Knop
@ 2022-08-09 12:17 ` Ryszard Knop
2022-08-09 12:18 ` [igt-dev] [PATCH i-g-t 2/3] lib/vendor: Add the meow_fft library Ryszard Knop
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Ryszard Knop @ 2022-08-09 12:17 UTC (permalink / raw)
To: Development mailing list for IGT GPU Tools
This directory is in the igt tree for convenience. It's not immediately
clear that this is a vendored library, so move it into vendor/ and make
Meson add that directory for easy includes etc.
Signed-off-by: Ryszard Knop <ryszard.knop@intel.com>
---
lib/meson.build | 6 +++++-
lib/{ => vendor}/uwildmat/uwildmat.c | 0
lib/{ => vendor}/uwildmat/uwildmat.h | 0
3 files changed, 5 insertions(+), 1 deletion(-)
rename lib/{ => vendor}/uwildmat/uwildmat.c (100%)
rename lib/{ => vendor}/uwildmat/uwildmat.h (100%)
diff --git a/lib/meson.build b/lib/meson.build
index 98c2803b..96fe46d9 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -78,7 +78,6 @@ lib_sources = [
'igt_pm.c',
'igt_dummyload.c',
'igt_store.c',
- 'uwildmat/uwildmat.c',
'igt_kmod.c',
'igt_panfrost.c',
'igt_v3d.c',
@@ -90,6 +89,9 @@ lib_sources = [
'igt_infoframe.c',
'veboxcopy_gen12.c',
'igt_msm.c',
+
+ # Vendored libraries:
+ 'vendor/uwildmat/uwildmat.c',
]
lib_deps = [
@@ -109,6 +111,8 @@ lib_deps = [
zlib
]
+inc = [ inc, include_directories('vendor') ]
+
if libdrm_intel.found()
lib_deps += libdrm_intel
else
diff --git a/lib/uwildmat/uwildmat.c b/lib/vendor/uwildmat/uwildmat.c
similarity index 100%
rename from lib/uwildmat/uwildmat.c
rename to lib/vendor/uwildmat/uwildmat.c
diff --git a/lib/uwildmat/uwildmat.h b/lib/vendor/uwildmat/uwildmat.h
similarity index 100%
rename from lib/uwildmat/uwildmat.h
rename to lib/vendor/uwildmat/uwildmat.h
--
2.37.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [igt-dev] [PATCH i-g-t 2/3] lib/vendor: Add the meow_fft library
2022-08-09 12:17 [igt-dev] [PATCH i-g-t 0/3] Switch the FFT library from GSL to meow_fft Ryszard Knop
2022-08-09 12:17 ` [igt-dev] [PATCH i-g-t 1/3] lib/uwildmat: Move to a dedicated vendored library directory Ryszard Knop
@ 2022-08-09 12:18 ` Ryszard Knop
2022-08-09 12:18 ` [igt-dev] [PATCH i-g-t 3/3] lib/igt_audio: Replace GSL FFT usage with meow_fft Ryszard Knop
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Ryszard Knop @ 2022-08-09 12:18 UTC (permalink / raw)
To: Development mailing list for IGT GPU Tools
The meow_fft library provides a simple and permissively-licensed Fast
Fourier Transform implementation. It is an alternative for GSL's FFT.
The library was modified to conform to the IGT's compiler warning flags
and to use doubles instead of floats by default for higher accuracy.
Signed-off-by: Ryszard Knop <ryszard.knop@intel.com>
---
lib/meson.build | 1 +
lib/vendor/meow_fft/meow_fft.c | 10 +
lib/vendor/meow_fft/meow_fft.h | 2412 ++++++++++++++++++++++++++++++++
3 files changed, 2423 insertions(+)
create mode 100644 lib/vendor/meow_fft/meow_fft.c
create mode 100644 lib/vendor/meow_fft/meow_fft.h
diff --git a/lib/meson.build b/lib/meson.build
index 96fe46d9..a902df91 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -92,6 +92,7 @@ lib_sources = [
# Vendored libraries:
'vendor/uwildmat/uwildmat.c',
+ 'vendor/meow_fft/meow_fft.c',
]
lib_deps = [
diff --git a/lib/vendor/meow_fft/meow_fft.c b/lib/vendor/meow_fft/meow_fft.c
new file mode 100644
index 00000000..f94ea637
--- /dev/null
+++ b/lib/vendor/meow_fft/meow_fft.c
@@ -0,0 +1,10 @@
+#define MEOW_FFT_IMPLEMENTATION
+#define MEOW_FLOAT_TYPE double
+#include "meow_fft.h"
+
+/*
+ * This is a dummy file to build the object file containing
+ * the meow_fft implementation. All code should go into the
+ * header itself. If you want to use it in any other file,
+ * just #include the header without defining MEOW_FFT_IMPL.
+ */
\ No newline at end of file
diff --git a/lib/vendor/meow_fft/meow_fft.h b/lib/vendor/meow_fft/meow_fft.h
new file mode 100644
index 00000000..46d05d6c
--- /dev/null
+++ b/lib/vendor/meow_fft/meow_fft.h
@@ -0,0 +1,2412 @@
+/*
+ Imported from https://github.com/JodiTheTigger/meow_fft + Pull Request #11
+
+ Changes for igt-gpu-tools:
+ - Default MEOW_FLOAT_TYPE is now double
+ - Added extra function prototypes to satisfy -Wmissing-prototypes
+ - Hoisted variable declarations to satisfy -Wdeclaration-after-statement
+*/
+/*
+ meow_fft. My Easy Oresome Wonderful Fast Fourier Transform.
+ Copyright (C) 2017 Richard Maxwell <jodi.the.tigger@gmail.com>
+
+ Permission to use, copy, modify, and/or distribute this software for any
+ purpose with or without fee is hereby granted.
+
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ SPECIAL, DIRECT, 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.
+*/
+
+#ifndef MEOW_FFT
+#define MEOW_FFT
+
+#include <stdlib.h>
+// for size_t, abort
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// C-API -----------------------------------------------------------------------
+
+// Can be float, double or long double
+#ifndef MEOW_FLOAT_TYPE
+#define MEOW_FLOAT_TYPE double
+#endif
+
+typedef MEOW_FLOAT_TYPE Meow_Float;
+
+typedef struct Meow_FFT_Complex
+{
+ Meow_Float r;
+ Meow_Float j;
+}
+Meow_FFT_Complex;
+
+struct Meow_FFT_Workset;
+struct Meow_FFT_Workset_Real;
+
+size_t meow_fft_generate_workset
+(
+ int N
+ , struct Meow_FFT_Workset* workset
+);
+// returns the size of the workset if null is passed. 0 if N is invalid.
+
+size_t meow_fft_generate_workset_real
+(
+ int N
+ , struct Meow_FFT_Workset_Real* workset
+);
+// returns the size of the workset if null is passed. 0 if N is invalid.
+
+unsigned meow_fft_is_slow (const struct Meow_FFT_Workset* workset);
+unsigned meow_fft_is_slow_real(const struct Meow_FFT_Workset_Real* workset);
+// returns non-zero if the fft has a slow dft in any one of its stages.
+
+// C-API (ffts) ----------------------------------------------------------------
+
+// NOTES:
+// countof(out) == countof(in).
+// In order to do that I have mixed out[0] with out[N/2]. That is:
+// out[0].r == out[0].r, out[0].j = out[N/2].r
+
+
+void meow_fft_real
+(
+ const struct Meow_FFT_Workset_Real* workset
+ , const Meow_Float* in
+ , Meow_FFT_Complex* out
+);
+
+void meow_fft_real_i
+(
+ const struct Meow_FFT_Workset_Real* workset
+ , const Meow_FFT_Complex* in
+ , Meow_FFT_Complex* temp
+ , Meow_Float* out
+);
+
+void meow_fft
+(
+ const struct Meow_FFT_Workset* data
+ , const Meow_FFT_Complex* in
+ , Meow_FFT_Complex* out
+);
+
+void meow_fft_i
+(
+ const struct Meow_FFT_Workset* data
+ , const Meow_FFT_Complex* in
+ , Meow_FFT_Complex* out
+);
+
+// -----------------------------------------------------------------------------
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // MEOW_FFT
+
+#ifdef MEOW_FFT_IMPLEMENTATION
+
+// Reading List ----------------------------------------------------------------
+//
+// It's a circle! -> How FFTs _actually_ work
+// http://betterexplained.com/articles/an-interactive-guide-to-the-fourier-transform/
+//
+// How to get radix-2, 3, 4, and 5 formulas:
+// http://www.briangough.com/fftalgorithms.pdf pages 18 and 19
+//
+// How do make a faster fft when only dealing with real (non-complex) inputs.
+// (Warning, the maths is confusing due to inconsisten formulas and assumptions)
+// http://www.engineeringproductivitytools.com/stuff/T0001/PT10.HTM
+//
+// Finally, know that ffts are pretty much as fast as you can get, you need
+// to start making them cache friendly to get any extra speed.
+// https://math.mit.edu/~stevenj/18.335/FFTW-Alan-2008.pdf
+//
+// -----------------------------------------------------------------------------
+
+#include <math.h>
+#include <stdint.h>
+
+typedef const Meow_FFT_Complex Complex;
+
+#define MEOW_TAU 6.283185307179586476925286766559005768394338798750211641949889
+
+// Plumbing --------------------------------------------------------------------
+
+typedef struct Meow_Fft_Stages
+{
+ unsigned count;
+ unsigned* radix;
+ unsigned* remainder;
+ unsigned* offsets;
+}
+Meow_Fft_Stages;
+
+typedef struct Meow_FFT_Workset
+{
+ int N;
+
+ Meow_FFT_Complex* wn;
+ // Non-null only defined if there is a slow-dft as one of the radix stages.
+
+ Meow_FFT_Complex* wn_ordered;
+ // Sequentially ordered per stage, will be duplicates between stages.
+
+ Meow_Fft_Stages stages;
+}
+Meow_FFT_Workset;
+
+typedef struct Meow_FFT_Workset_Real
+{
+ Meow_FFT_Complex* w_2n;
+ Meow_FFT_Workset half;
+}
+Meow_FFT_Workset_Real;
+
+typedef struct Meow_Stage_Info
+{
+ unsigned is_slow;
+ unsigned stage_count;
+ unsigned w_count;
+}
+Meow_Stage_Info;
+
+// --------------------- IGT prototype changes start here ---------------------
+
+unsigned meow_is_codelet(unsigned radix);
+void meow_make_twiddles(unsigned n, unsigned count, Meow_FFT_Complex* w);
+unsigned meow_make_twiddles_sequential(unsigned n, Meow_FFT_Complex* w, Meow_Fft_Stages* stages);
+Meow_Stage_Info meow_calculate_stages(unsigned n, Meow_FFT_Workset* workset);
+
+void meow_dft_n_dit(const Meow_FFT_Complex* w_n,
+ Meow_FFT_Complex* out,
+ unsigned count,
+ unsigned w_multiplier,
+ unsigned radix,
+ unsigned N,
+ unsigned reverse);
+
+void meow_radix_2_dit(const Meow_FFT_Complex* w_n, Meow_FFT_Complex* out, unsigned count);
+void meow_radix_3_dit(const Meow_FFT_Complex* w_n, Meow_FFT_Complex* out, unsigned count);
+void meow_radix_4_dit(const Meow_FFT_Complex* w_n, Meow_FFT_Complex* out, unsigned count);
+void meow_radix_5_dit(const Meow_FFT_Complex* w_n, Meow_FFT_Complex* out, unsigned count);
+
+void meow_radix_2_dit_i(const Meow_FFT_Complex* w_n, Meow_FFT_Complex* out, unsigned count);
+void meow_radix_3_dit_i(const Meow_FFT_Complex* w_n, Meow_FFT_Complex* out, unsigned count);
+void meow_radix_4_dit_i(const Meow_FFT_Complex* w_n, Meow_FFT_Complex* out, unsigned count);
+void meow_radix_5_dit_i(const Meow_FFT_Complex* w_n, Meow_FFT_Complex* out, unsigned count);
+
+void meow_recursive_fft_mixed_meow_radix_dit(const Meow_FFT_Workset* fft,
+ unsigned stage,
+ Complex* in,
+ Meow_FFT_Complex* out,
+ unsigned w_mul);
+
+void meow_recursive_fft_mixed_meow_radix_dit_i(const Meow_FFT_Workset* fft,
+ unsigned stage,
+ Complex* in,
+ Meow_FFT_Complex* out,
+ unsigned w_mul);
+
+// ---------------------- IGT prototype changes end here ----------------------
+
+unsigned meow_is_codelet(unsigned radix)
+{
+ return ((radix <= 5) || (radix == 8));
+}
+
+void meow_make_twiddles
+(
+ unsigned n
+ , unsigned count
+ , Meow_FFT_Complex* w
+)
+{
+ const double ni = 1.0f / n;
+ for (unsigned i = 0; i < count; ++i)
+ {
+ w[i].r = (Meow_Float) cos(MEOW_TAU * i * ni);
+ w[i].j = (Meow_Float) sin(MEOW_TAU * i * ni);
+ }
+}
+
+unsigned meow_make_twiddles_sequential
+(
+ unsigned n
+ , Meow_FFT_Complex* w
+ , Meow_Fft_Stages* stages
+)
+// Returns number of W constants needed.
+{
+ // Figure out the tiddle offsets.
+ unsigned w_count = 0;
+ {
+ unsigned offset = 0;
+
+ for (unsigned s = 0; s < stages->count; s++)
+ {
+ unsigned r = stages->radix[s];
+ unsigned count = stages->remainder[s];
+
+ unsigned amount = meow_is_codelet(r) ? (r - 1) * (count - 1) : 0u;
+
+ stages->offsets[s] = amount;
+ offset += amount;
+ }
+
+ w_count = offset;
+
+ for (unsigned s = 0; s < stages->count; s++)
+ {
+ unsigned count = stages->offsets[s];
+ offset -= count;
+ stages->offsets[s] = offset;
+ }
+ }
+
+ // Fill in the twiddles so that they are accessed sequentially in the radix
+ // code for best cacheline use.
+ if (w)
+ {
+ unsigned w_mul = 1;
+ double ni = 1.0 / n;
+
+ for (unsigned s = 0; s < stages->count; s++)
+ {
+ const unsigned radix = stages->radix[s];
+ const unsigned count = stages->remainder[s];
+ unsigned offset = stages->offsets[s];
+
+ if (meow_is_codelet(radix))
+ {
+ for (unsigned i = 1 ; i < count; i++)
+ {
+ for (unsigned j = 1; j < radix; j++)
+ {
+ const unsigned w_x = i * j * w_mul;
+
+ w[offset].r = (Meow_Float) cos(MEOW_TAU * w_x * ni);
+ w[offset].j = (Meow_Float) sin(MEOW_TAU * w_x * ni);
+
+ offset++;
+ }
+ }
+ }
+
+ w_mul *= radix;
+ }
+ }
+
+ return w_count;
+}
+
+Meow_Stage_Info meow_calculate_stages(unsigned n, Meow_FFT_Workset* workset)
+{
+ unsigned is_slow = 0u;
+ unsigned stage = 0u;
+ unsigned w_count = 0u;
+
+ while (n > 1)
+ {
+ // premade codelets 2, 3, 4, 5, 8
+ unsigned i = 8;
+ for (; i > 1; i--)
+ {
+ if ((i == 7) || (i == 6))
+ {
+ // don't have radix-7 or radix-6.
+ continue;
+ }
+
+ if (!(n % i))
+ {
+ w_count += ((i - 1) * (n - 1));
+ break;
+ }
+ }
+
+ // bah, plain slow dft instead
+ if (i == 1)
+ {
+ is_slow = 1;
+ i = 7;
+ for (; i <= n; i++)
+ {
+ if (!(n % i))
+ {
+ break;
+ }
+ }
+ }
+
+ n /= i;
+
+ if (workset)
+ {
+ workset->stages.radix[stage] = i;
+ workset->stages.remainder[stage] = n;
+ }
+
+ stage++;
+ }
+
+ {
+ Meow_Stage_Info result =
+ {
+ is_slow
+ , stage
+ , w_count
+ };
+
+ return result;
+ }
+}
+
+size_t meow_fft_generate_workset(int N, Meow_FFT_Workset* workset)
+{
+ size_t size_workset, size_radix, size_remainder, size_offsets;
+ size_t size_twiddles, size_twiddles_ordered, size_total;
+ Meow_Stage_Info info;
+
+ if (N < 2)
+ {
+ // Too small.
+ return 0;
+ }
+
+ info = meow_calculate_stages(N, NULL);
+
+ size_workset = sizeof(Meow_FFT_Workset);
+ size_radix = info.stage_count * sizeof(int);
+ size_remainder = info.stage_count * sizeof(int);
+ size_offsets = info.stage_count * sizeof(int);
+
+ size_twiddles_ordered =
+ info.w_count * sizeof(Meow_FFT_Complex);
+
+ size_twiddles =
+ N * sizeof(Meow_FFT_Complex) * info.is_slow;
+
+ size_total =
+ size_workset
+ + size_twiddles
+ + size_radix
+ + size_remainder
+ + size_offsets
+ + size_twiddles_ordered;
+
+ if (workset)
+ {
+ uint8_t* data = (uint8_t*)(workset);
+
+ uint8_t* data_wn = data + size_workset;
+ uint8_t* data_radix = data_wn + size_twiddles;
+ uint8_t* data_remainder = data_radix + size_radix;
+ uint8_t* data_offsets = data_remainder + size_offsets;
+ uint8_t* data_wn_ordered = data_offsets + size_remainder;
+
+ workset->wn =
+ (info.is_slow)
+ ? (Meow_FFT_Complex*)(data_wn)
+ : NULL;
+
+ workset->stages.radix = (unsigned*)(data_radix);
+ workset->stages.remainder = (unsigned*)(data_remainder);
+ workset->stages.offsets = (unsigned*)(data_offsets);
+ workset->stages.count = info.stage_count;
+ workset->wn_ordered = (Meow_FFT_Complex*)(data_wn_ordered);
+ workset->N = N;
+
+ if (workset->wn)
+ {
+ meow_make_twiddles(N, N, workset->wn);
+ }
+
+ meow_calculate_stages(N, workset);
+
+ meow_make_twiddles_sequential
+ (
+ N
+ , workset->wn_ordered
+ , &workset->stages
+ );
+ }
+
+ return size_total;
+}
+
+size_t meow_fft_generate_workset_real
+(
+ const int N
+ , Meow_FFT_Workset_Real* workset
+)
+{
+ unsigned N_2, N_4;
+ size_t size_workset, size_w_2n, size_half;
+
+ if ((N < 4) || (N % 2))
+ {
+ // Too small or not divisible by two.
+ return 0;
+ }
+
+ N_2 = N / 2;
+ N_4 = N / 4;
+
+ size_workset = sizeof(Meow_FFT_Workset_Real);
+ size_w_2n = (N_4 + 1) * sizeof(Meow_FFT_Complex);
+ size_half = meow_fft_generate_workset(N_2, NULL);
+
+ if (workset)
+ {
+ uint8_t *data, *data_w_2n;
+
+ meow_fft_generate_workset(N_2, &workset->half);
+
+ data = (uint8_t*)(&workset->half);
+ data_w_2n = data + size_half;
+
+ workset->w_2n = (Meow_FFT_Complex*)(data_w_2n);
+
+ meow_make_twiddles(N, N_4 + 1, workset->w_2n);
+ }
+
+ return size_workset + size_w_2n + size_half;
+}
+
+// -----------------------------------------------------------------------------
+
+unsigned meow_fft_is_slow(const Meow_FFT_Workset* workset)
+{
+ return !!(workset->wn);
+}
+
+unsigned meow_fft_is_slow_real(const Meow_FFT_Workset_Real* workset)
+{
+ return meow_fft_is_slow(&workset->half);
+}
+
+// -----------------------------------------------------------------------------
+
+inline Meow_FFT_Complex meow_add
+(
+ const Meow_FFT_Complex lhs
+ , const Meow_FFT_Complex rhs
+)
+{
+ Meow_FFT_Complex result =
+ {
+ lhs.r + rhs.r
+ , lhs.j + rhs.j
+ };
+
+ return result;
+}
+
+inline Meow_FFT_Complex meow_sub
+(
+ const Meow_FFT_Complex lhs
+ , const Meow_FFT_Complex rhs
+)
+{
+ Meow_FFT_Complex result =
+ {
+ lhs.r - rhs.r
+ , lhs.j - rhs.j
+ };
+
+ return result;
+}
+
+inline Meow_FFT_Complex meow_negate(const Meow_FFT_Complex lhs)
+{
+ Meow_FFT_Complex result =
+ {
+ -lhs.r
+ , -lhs.j
+ };
+
+ return result;
+}
+
+inline Meow_FFT_Complex meow_conjugate(const Meow_FFT_Complex lhs)
+{
+ Meow_FFT_Complex result =
+ {
+ lhs.r
+ , -lhs.j
+ };
+
+ return result;
+}
+
+inline Meow_FFT_Complex meow_mul
+(
+ const Meow_FFT_Complex lhs
+ , const Meow_FFT_Complex rhs
+)
+{
+ Meow_FFT_Complex result =
+ {
+ (lhs.r * rhs.r) - (lhs.j * rhs.j)
+ , (lhs.r * rhs.j) + (lhs.j * rhs.r)
+ };
+
+ return result;
+}
+
+inline Meow_FFT_Complex meow_mul_by_conjugate
+(
+ const Meow_FFT_Complex lhs
+ , const Meow_FFT_Complex rhs
+)
+{
+ Meow_FFT_Complex result =
+ {
+ (lhs.r * rhs.r) + (lhs.j * rhs.j)
+ , (lhs.j * rhs.r) - (lhs.r * rhs.j)
+ };
+
+ return result;
+}
+
+inline Meow_FFT_Complex meow_mul_by_j(const Meow_FFT_Complex lhs)
+{
+ Meow_FFT_Complex result =
+ {
+ -lhs.j
+ , lhs.r
+ };
+
+ return result;
+}
+
+inline Meow_FFT_Complex meow_mulf
+(
+ const Meow_FFT_Complex lhs
+ , Meow_Float rhs
+)
+{
+ Meow_FFT_Complex result =
+ {
+ lhs.r * rhs
+ , lhs.j * rhs
+ };
+
+ return result;
+}
+
+// -----------------------------------------------------------------------------
+
+// https://developercommunity.visualstudio.com/t/fatal-error-C1001:-Internal-compiler-err/1390698
+// https://developercommunity.visualstudio.com/t/bug-in-visual-c-2019-and-below-i-think-it-is-relat/1119500
+// https://developercommunity.visualstudio.com/t/optimized-compiler-bug/846597
+#if defined(_MSC_VER) && (_MSC_VER < 1930)
+#define MSVC_BUGFIX volatile
+#else
+#define MSVC_BUGFIX
+#endif
+
+void meow_dft_n_dit
+(
+ const Meow_FFT_Complex* w_n
+ , Meow_FFT_Complex* out
+ , unsigned count
+ , unsigned w_multiplier
+ , unsigned radix
+ , unsigned N
+ , unsigned reverse
+)
+{
+ Meow_FFT_Complex scratch[2048];
+ // Can I do something with the knowledge that n is always odd?
+
+ if (radix > 2048)
+ {
+ abort();
+ // removing VLAs, so set a hard limit we support.
+ }
+
+ for (unsigned butterfly = 0; butterfly < count; ++butterfly)
+ {
+ for (unsigned i = 0; i < radix; i++)
+ {
+ scratch[i] = out[i * count + butterfly];
+ }
+
+ for (unsigned i = 0 ; i < radix ; ++i)
+ {
+ MSVC_BUGFIX const unsigned index_out = i * count + butterfly;
+
+ // W0 is always 1
+ Meow_FFT_Complex sum = scratch[0];
+
+ for (unsigned j = 1; j < radix; ++j )
+ {
+ const unsigned wi = (j * w_multiplier * index_out) % N;
+ Complex w = w_n[wi];
+ Complex in = scratch[j];
+
+ Meow_Float rr;
+ Meow_Float jj;
+
+ if (reverse)
+ {
+ rr = (in.r * w.r) - (in.j * w.j);
+ jj = (in.r * w.j) + (in.j * w.r);
+ }
+ else
+ {
+ rr = (in.r * w.r) + (in.j * w.j);
+ jj = (in.j * w.r) - (in.r * w.j);
+ }
+
+ sum.r += rr;
+ sum.j += jj;
+ }
+
+ out[index_out] = sum;
+ }
+ }
+}
+
+// -----------------------------------------------------------------------------
+
+// Algorithms taken from
+// http://www.briangough.com/fftalgorithms.pdf
+// (equations 135 to 146)
+// in, out and twiddle indicies taken from kiss_fft
+// All twiddles are assumed to be ifft calculated. Conjugation is done in the
+// maths.
+// All twiddle input arrays are assumed to be sequentiall accessed. Twiddle
+// indicies are pre-calculated.
+
+// -----------------------------------------------------------------------------
+// Forward
+// -----------------------------------------------------------------------------
+
+void meow_radix_2_dit
+(
+ const Meow_FFT_Complex* w_n
+ , Meow_FFT_Complex* out
+ , unsigned count
+)
+{
+ // butteryfly 0 always has the twiddle factor == 1.0f
+ // so special case that one.
+ {
+ Complex z0 = out[0];
+ Complex z1 = out[count];
+
+ out[0] = meow_add(z0, z1);
+ out[count] = meow_sub(z0, z1);
+ }
+
+ for (unsigned butterfly = 1; butterfly < count; ++butterfly)
+ {
+ Complex w = w_n[butterfly - 1];
+
+ const unsigned i0 = butterfly;
+ const unsigned i1 = butterfly + count;
+
+ Complex z0 = out[i0];
+ Complex z1 = meow_mul_by_conjugate(out[i1], w);
+
+ out[i0] = meow_add(z0, z1);
+ out[i1] = meow_sub(z0, z1);
+ // Equation 135
+ }
+}
+
+#define MEOW_SIN_PI_3 -0.866025403784438646763723170752936183471402626905190314f
+
+void meow_radix_3_dit
+(
+ const Meow_FFT_Complex* w_n
+ , Meow_FFT_Complex* out
+ , unsigned count
+)
+{
+ unsigned wi = 0;
+
+ // W[0] is always 1.0f;
+ {
+ const unsigned i0 = 0 * count;
+ const unsigned i1 = 1 * count;
+ const unsigned i2 = 2 * count;
+
+ Complex z0 = out[i0];
+ Complex z1 = out[i1];
+ Complex z2 = out[i2];
+
+ Complex t1 = meow_add(z1, z2);
+ Complex t2 = meow_sub(z0, meow_mulf(t1, 0.5));
+ Complex t3j = meow_mul_by_j(meow_mulf(meow_sub(z1, z2), MEOW_SIN_PI_3));
+
+ out[i0] = meow_add(z0, t1);
+ out[i1] = meow_add(t2, t3j);
+ out[i2] = meow_sub(t2, t3j);
+ }
+
+ for (unsigned butterfly = 1; butterfly < count; butterfly++, wi+=2)
+ {
+ Complex w1 = w_n[wi + 0];
+ Complex w2 = w_n[wi + 1];
+
+ const unsigned i0 = butterfly;
+ const unsigned i1 = butterfly + count;
+ const unsigned i2 = butterfly + 2 * count;
+
+ Complex z0 = out[i0];
+ Complex z1 = meow_mul_by_conjugate(out[i1], w1);
+ Complex z2 = meow_mul_by_conjugate(out[i2], w2);
+
+ Complex t1 = meow_add(z1, z2);
+ Complex t2 = meow_sub(z0, meow_mulf(t1, 0.5));
+ Complex t3j = meow_mul_by_j(meow_mulf(meow_sub(z1, z2), MEOW_SIN_PI_3));
+ // Equation 136
+
+ out[i0] = meow_add(z0, t1);
+ out[i1] = meow_add(t2, t3j);
+ out[i2] = meow_sub(t2, t3j);
+ // Equation 137
+ }
+}
+
+void meow_radix_4_dit
+(
+ const Meow_FFT_Complex* w_n
+ , Meow_FFT_Complex* out
+ , unsigned count
+)
+{
+ unsigned wi = 0u;
+
+ // W[0] is always 1.0f;
+ {
+ const unsigned i0 = 0 * count;
+ const unsigned i1 = 1 * count;
+ const unsigned i2 = 2 * count;
+ const unsigned i3 = 3 * count;
+
+ Complex z0 = out[i0];
+ Complex z1 = out[i1];
+ Complex z2 = out[i2];
+ Complex z3 = out[i3];
+
+ Complex t1 = meow_add(z0, z2);
+ Complex t2 = meow_add(z1, z3);
+ Complex t3 = meow_sub(z0, z2);
+ Complex t4j = meow_negate(meow_mul_by_j(meow_sub(z1, z3)));
+
+ out[i0] = meow_add(t1, t2);
+ out[i1] = meow_add(t3, t4j);
+ out[i2] = meow_sub(t1, t2);
+ out[i3] = meow_sub(t3, t4j);
+ }
+
+ for (unsigned butterfly = 1; butterfly < count; ++butterfly, wi+=3)
+ {
+ Complex w1 = w_n[wi + 0];
+ Complex w2 = w_n[wi + 1];
+ Complex w3 = w_n[wi + 2];
+
+ const unsigned i0 = butterfly + 0 * count;
+ const unsigned i1 = butterfly + 1 * count;
+ const unsigned i2 = butterfly + 2 * count;
+ const unsigned i3 = butterfly + 3 * count;
+
+ Complex z0 = out[i0];
+ Complex z1 = meow_mul_by_conjugate(out[i1], w1);
+ Complex z2 = meow_mul_by_conjugate(out[i2], w2);
+ Complex z3 = meow_mul_by_conjugate(out[i3], w3);
+
+ Complex t1 = meow_add(z0, z2);
+ Complex t2 = meow_add(z1, z3);
+ Complex t3 = meow_sub(z0, z2);
+ Complex t4j = meow_negate(meow_mul_by_j(meow_sub(z1, z3)));
+ // Equations 138
+ // Also instead of conjugating the input and multplying with the
+ // twiddles for the ifft, we invert the twiddles instead. This works
+ // fine except here, the mul_by_j is assuming that it's the forward
+ // fft twiddle we are multiplying with, not the conjugated one we
+ // actually have. So we have to conjugate it _back_ if we are doing the
+ // ifft.
+ // Also, had to multiply by -j, not j for reasons I am yet to grasp.
+
+ out[i0] = meow_add(t1, t2);
+ out[i1] = meow_add(t3, t4j);
+ out[i2] = meow_sub(t1, t2);
+ out[i3] = meow_sub(t3, t4j);
+ // Equations 139
+ }
+}
+
+#define MEOW_SQR_5_DIV_4 0.5590169943749474241022934171828190588601545899028814f
+#define MEOW_SIN_2PI_5 -0.9510565162951535721164393333793821434056986341257502f
+#define MEOW_SIN_2PI_10 -0.5877852522924731291687059546390727685976524376431459f
+
+void meow_radix_5_dit
+(
+ const Meow_FFT_Complex* w_n
+ , Meow_FFT_Complex* out
+ , unsigned count
+)
+{
+ unsigned wi = 0u;
+
+ // W[0] is always 1.0f;
+ {
+ const unsigned i0 = 0 * count;
+ const unsigned i1 = 1 * count;
+ const unsigned i2 = 2 * count;
+ const unsigned i3 = 3 * count;
+ const unsigned i4 = 4 * count;
+
+ Complex z0 = out[i0];
+ Complex z1 = out[i1];
+ Complex z2 = out[i2];
+ Complex z3 = out[i3];
+ Complex z4 = out[i4];
+
+ Complex t1 = meow_add(z1, z4);
+ Complex t2 = meow_add(z2, z3);
+ Complex t3 = meow_sub(z1, z4);
+ Complex t4 = meow_sub(z2, z3);
+ // Equations 140
+
+ Complex t5 = meow_add(t1, t2);
+ Complex t6 = meow_mulf(meow_sub(t1, t2), MEOW_SQR_5_DIV_4);
+ Complex t7 = meow_sub(z0, meow_mulf(t5, 0.25f));
+ // Equation 141
+
+ Complex t8 = meow_add(t7, t6);
+ Complex t9 = meow_sub(t7, t6);
+ // Equation 142
+
+ Complex t10j = meow_mul_by_j
+ (
+ meow_add
+ (
+ meow_mulf(t3, MEOW_SIN_2PI_5)
+ , meow_mulf(t4, MEOW_SIN_2PI_10)
+ )
+ );
+
+ Complex t11j = meow_mul_by_j
+ (
+ meow_sub
+ (
+ meow_mulf(t3, MEOW_SIN_2PI_10)
+ , meow_mulf(t4, MEOW_SIN_2PI_5)
+ )
+ );
+ // Equation 143
+
+ out[i0] = meow_add(z0, t5);
+ // Equation 144
+
+ out[i1] = meow_add(t8, t10j);
+ out[i2] = meow_add(t9, t11j);
+ // Equation 145
+
+ out[i3] = meow_sub(t9, t11j);
+ out[i4] = meow_sub(t8, t10j);
+ // Equation 146
+ }
+
+ for (unsigned butterfly = 1; butterfly < count; ++butterfly, wi+=4)
+ {
+ Complex w1 = w_n[wi + 0];
+ Complex w2 = w_n[wi + 1];
+ Complex w3 = w_n[wi + 2];
+ Complex w4 = w_n[wi + 3];
+
+ unsigned i0 = butterfly + 0 * count;
+ unsigned i1 = butterfly + 1 * count;
+ unsigned i2 = butterfly + 2 * count;
+ unsigned i3 = butterfly + 3 * count;
+ unsigned i4 = butterfly + 4 * count;
+
+ Complex z0 = out[i0];
+ Complex z1 = meow_mul_by_conjugate(out[i1], w1);
+ Complex z2 = meow_mul_by_conjugate(out[i2], w2);
+ Complex z3 = meow_mul_by_conjugate(out[i3], w3);
+ Complex z4 = meow_mul_by_conjugate(out[i4], w4);
+
+ Complex t1 = meow_add(z1, z4);
+ Complex t2 = meow_add(z2, z3);
+ Complex t3 = meow_sub(z1, z4);
+ Complex t4 = meow_sub(z2, z3);
+ // Equations 140
+
+ Complex t5 = meow_add(t1, t2);
+ Complex t6 = meow_mulf(meow_sub(t1, t2), MEOW_SQR_5_DIV_4);
+ Complex t7 = meow_sub(z0, meow_mulf(t5, 0.25f));
+ // Equation 141
+
+ Complex t8 = meow_add(t7, t6);
+ Complex t9 = meow_sub(t7, t6);
+ // Equation 142
+
+ Complex t10j = meow_mul_by_j
+ (
+ meow_add
+ (
+ meow_mulf(t3, MEOW_SIN_2PI_5)
+ , meow_mulf(t4, MEOW_SIN_2PI_10)
+ )
+ );
+
+ Complex t11j = meow_mul_by_j
+ (
+ meow_sub
+ (
+ meow_mulf(t3, MEOW_SIN_2PI_10)
+ , meow_mulf(t4, MEOW_SIN_2PI_5)
+ )
+ );
+ // Equation 143
+
+ out[i0] = meow_add(z0, t5);
+ // Equation 144
+
+ out[i1] = meow_add(t8, t10j);
+ out[i2] = meow_add(t9, t11j);
+ // Equation 145
+
+ out[i3] = meow_sub(t9, t11j);
+ out[i4] = meow_sub(t8, t10j);
+ // Equation 146
+ }
+}
+
+#define MEOW_1_DIV_SQR_2 0.707106781186547524400844362104849039284835938f
+
+static void meow_radix_8_dit
+(
+ const Meow_FFT_Complex* w_n
+ , Meow_FFT_Complex* out
+ , unsigned count
+)
+{
+ const Meow_Float* W = &w_n[0].r;
+
+ {
+ Meow_Float T3;
+ Meow_Float T23;
+ Meow_Float T18;
+ Meow_Float T38;
+ Meow_Float T6;
+ Meow_Float T37;
+ Meow_Float T21;
+ Meow_Float T24;
+ Meow_Float T13;
+ Meow_Float T49;
+ Meow_Float T35;
+ Meow_Float T43;
+ Meow_Float T10;
+ Meow_Float T48;
+ Meow_Float T30;
+ Meow_Float T42;
+ {
+ Meow_Float T1;
+ Meow_Float T2;
+ Meow_Float T19;
+ Meow_Float T20;
+ T1 = out[0].r;
+ T2 = out[count * 4].r;
+ T3 = T1 + T2;
+ T23 = T1 - T2;
+ {
+ Meow_Float T16;
+ Meow_Float T17;
+ Meow_Float T4;
+ Meow_Float T5;
+ T16 = out[0].j;
+ T17 = out[count * 4].j;
+ T18 = T16 + T17;
+ T38 = T16 - T17;
+ T4 = out[count * 2].r;
+ T5 = out[count * 6].r;
+ T6 = T4 + T5;
+ T37 = T4 - T5;
+ }
+ T19 = out[count * 2].j;
+ T20 = out[count * 6].j;
+ T21 = T19 + T20;
+ T24 = T19 - T20;
+ {
+ Meow_Float T11;
+ Meow_Float T12;
+ Meow_Float T31;
+ Meow_Float T32;
+ Meow_Float T33;
+ Meow_Float T34;
+ T11 = out[count * 7].r;
+ T12 = out[count * 3].r;
+ T31 = T11 - T12;
+ T32 = out[count * 7].j;
+ T33 = out[count * 3].j;
+ T34 = T32 - T33;
+ T13 = T11 + T12;
+ T49 = T32 + T33;
+ T35 = T31 - T34;
+ T43 = T31 + T34;
+ }
+ {
+ Meow_Float T8;
+ Meow_Float T9;
+ Meow_Float T26;
+ Meow_Float T27;
+ Meow_Float T28;
+ Meow_Float T29;
+ T8 = out[count * 1].r;
+ T9 = out[count * 5].r;
+ T26 = T8 - T9;
+ T27 = out[count * 1].j;
+ T28 = out[count * 5].j;
+ T29 = T27 - T28;
+ T10 = T8 + T9;
+ T48 = T27 + T28;
+ T30 = T26 + T29;
+ T42 = T29 - T26;
+ }
+ }
+ {
+ Meow_Float T7;
+ Meow_Float T14;
+ Meow_Float T51;
+ Meow_Float T52;
+ T7 = T3 + T6;
+ T14 = T10 + T13;
+ out[count * 4].r = T7 - T14;
+ out[0].r = T7 + T14;
+ T51 = T18 + T21;
+ T52 = T48 + T49;
+ out[count * 4].j = T51 - T52;
+ out[0].j = T51 + T52;
+ }
+ {
+ Meow_Float T15;
+ Meow_Float T22;
+ Meow_Float T47;
+ Meow_Float T50;
+ T15 = T13 - T10;
+ T22 = T18 - T21;
+ out[count * 2].j = T15 + T22;
+ out[count * 6].j = T22 - T15;
+ T47 = T3 - T6;
+ T50 = T48 - T49;
+ out[count * 6].r = T47 - T50;
+ out[count * 2].r = T47 + T50;
+ }
+ {
+ Meow_Float T25;
+ Meow_Float T36;
+ Meow_Float T45;
+ Meow_Float T46;
+ T25 = T23 + T24;
+ T36 = MEOW_1_DIV_SQR_2 * (T30 + T35);
+ out[count * 5].r = T25 - T36;
+ out[count * 1].r = T25 + T36;
+ T45 = T38 - T37;
+ T46 = MEOW_1_DIV_SQR_2 * (T42 + T43);
+ out[count * 5].j = T45 - T46;
+ out[count * 1].j = T45 + T46;
+ }
+ {
+ Meow_Float T39;
+ Meow_Float T40;
+ Meow_Float T41;
+ Meow_Float T44;
+ T39 = T37 + T38;
+ T40 = MEOW_1_DIV_SQR_2 * (T35 - T30);
+ out[count * 7].j = T39 - T40;
+ out[count * 3].j = T39 + T40;
+ T41 = T23 - T24;
+ T44 = MEOW_1_DIV_SQR_2 * (T42 - T43);
+ out[count * 7].r = T41 - T44;
+ out[count * 3].r = T41 + T44;
+ }
+ }
+
+ out = out + 1;
+
+ {
+ unsigned m;
+ for (m = 1; m < count; m = m + 1, out = out + 1, W = W + 14)
+ {
+ Meow_Float T7;
+ Meow_Float T76;
+ Meow_Float T43;
+ Meow_Float T71;
+ Meow_Float T41;
+ Meow_Float T65;
+ Meow_Float T53;
+ Meow_Float T56;
+ Meow_Float T18;
+ Meow_Float T77;
+ Meow_Float T46;
+ Meow_Float T68;
+ Meow_Float T30;
+ Meow_Float T64;
+ Meow_Float T48;
+ Meow_Float T51;
+ {
+ Meow_Float T1;
+ Meow_Float T70;
+ Meow_Float T6;
+ Meow_Float T69;
+ T1 = out[0].r;
+ T70 = out[0].j;
+ {
+ Meow_Float T3;
+ Meow_Float T5;
+ Meow_Float T2;
+ Meow_Float T4;
+ T3 = out[count * 4].r;
+ T5 = out[count * 4].j;
+ T2 = W[6];
+ T4 = W[7];
+ T6 = (T2 * T3) + (T4 * T5);
+ T69 = (T2 * T5) - (T4 * T3);
+ }
+ T7 = T1 + T6;
+ T76 = T70 - T69;
+ T43 = T1 - T6;
+ T71 = T69 + T70;
+ }
+ {
+ Meow_Float T35;
+ Meow_Float T54;
+ Meow_Float T40;
+ Meow_Float T55;
+ {
+ Meow_Float T32;
+ Meow_Float T34;
+ Meow_Float T31;
+ Meow_Float T33;
+ T32 = out[count * 7].r;
+ T34 = out[count * 7].j;
+ T31 = W[12];
+ T33 = W[13];
+ T35 = (T31 * T32) + (T33 * T34);
+ T54 = (T31 * T34) - (T33 * T32);
+ }
+ {
+ Meow_Float T37;
+ Meow_Float T39;
+ Meow_Float T36;
+ Meow_Float T38;
+ T37 = out[count * 3].r;
+ T39 = out[count * 3].j;
+ T36 = W[4];
+ T38 = W[5];
+ T40 = (T36 * T37) + (T38 * T39);
+ T55 = (T36 * T39) - (T38 * T37);
+ }
+ T41 = T35 + T40;
+ T65 = T54 + T55;
+ T53 = T35 - T40;
+ T56 = T54 - T55;
+ }
+ {
+ Meow_Float T12;
+ Meow_Float T44;
+ Meow_Float T17;
+ Meow_Float T45;
+ {
+ Meow_Float T9;
+ Meow_Float T11;
+ Meow_Float T8;
+ Meow_Float T10;
+ T9 = out[count * 2].r;
+ T11 = out[count * 2].j;
+ T8 = W[2];
+ T10 = W[3];
+ T12 = (T8 * T9) + (T10 * T11);
+ T44 = (T8 * T11) - (T10 * T9);
+ }
+ {
+ Meow_Float T14;
+ Meow_Float T16;
+ Meow_Float T13;
+ Meow_Float T15;
+ T14 = out[count * 6].r;
+ T16 = out[count * 6].j;
+ T13 = W[10];
+ T15 = W[11];
+ T17 = (T13 * T14) + (T15 * T16);
+ T45 = (T13 * T16) - (T15 * T14);
+ }
+ T18 = T12 + T17;
+ T77 = T12 - T17;
+ T46 = T44 - T45;
+ T68 = T44 + T45;
+ }
+ {
+ Meow_Float T24;
+ Meow_Float T49;
+ Meow_Float T29;
+ Meow_Float T50;
+ {
+ Meow_Float T21;
+ Meow_Float T23;
+ Meow_Float T20;
+ Meow_Float T22;
+ T21 = out[count * 1].r;
+ T23 = out[count * 1].j;
+ T20 = W[0];
+ T22 = W[1];
+ T24 = (T20 * T21) + (T22 * T23);
+ T49 = (T20 * T23) - (T22 * T21);
+ }
+ {
+ Meow_Float T26;
+ Meow_Float T28;
+ Meow_Float T25;
+ Meow_Float T27;
+ T26 = out[count * 5].r;
+ T28 = out[count * 5].j;
+ T25 = W[8];
+ T27 = W[9];
+ T29 = (T25 * T26) + (T27 * T28);
+ T50 = (T25 * T28) - (T27 * T26);
+ }
+ T30 = T24 + T29;
+ T64 = T49 + T50;
+ T48 = T24 - T29;
+ T51 = T49 - T50;
+ }
+ {
+ Meow_Float T19;
+ Meow_Float T42;
+ Meow_Float T73;
+ Meow_Float T74;
+ T19 = T7 + T18;
+ T42 = T30 + T41;
+ out[count * 4].r = T19 - T42;
+ out[0].r = T19 + T42;
+ {
+ Meow_Float T67;
+ Meow_Float T72;
+ Meow_Float T63;
+ Meow_Float T66;
+ T67 = T64 + T65;
+ T72 = T68 + T71;
+ out[0].j = T67 + T72;
+ out[count * 4].j = T72 - T67;
+ T63 = T7 - T18;
+ T66 = T64 - T65;
+ out[count * 6].r = T63 - T66;
+ out[count * 2].r = T63 + T66;
+ }
+ T73 = T41 - T30;
+ T74 = T71 - T68;
+ out[count * 2].j = T73 + T74;
+ out[count * 6].j = T74 - T73;
+ {
+ Meow_Float T59;
+ Meow_Float T78;
+ Meow_Float T62;
+ Meow_Float T75;
+ Meow_Float T60;
+ Meow_Float T61;
+ T59 = T43 - T46;
+ T78 = T76 - T77;
+ T60 = T51 - T48;
+ T61 = T53 + T56;
+ T62 = MEOW_1_DIV_SQR_2 * (T60 - T61);
+ T75 = MEOW_1_DIV_SQR_2 * (T60 + T61);
+ out[count * 7].r = T59 - T62;
+ out[count * 5].j = T78 - T75;
+ out[count * 3].r = T59 + T62;
+ out[count * 1].j = T75 + T78;
+ }
+ {
+ Meow_Float T47;
+ Meow_Float T80;
+ Meow_Float T58;
+ Meow_Float T79;
+ Meow_Float T52;
+ Meow_Float T57;
+ T47 = T43 + T46;
+ T80 = T77 + T76;
+ T52 = T48 + T51;
+ T57 = T53 - T56;
+ T58 = MEOW_1_DIV_SQR_2 * (T52 + T57);
+ T79 = MEOW_1_DIV_SQR_2 * (T57 - T52);
+ out[count * 5].r = T47 - T58;
+ out[count * 7].j = T80 - T79;
+ out[count * 1].r = T47 + T58;
+ out[count * 3].j = T79 + T80;
+ }
+ }
+ }
+ }
+}
+
+// -----------------------------------------------------------------------------
+// Inverse
+// -----------------------------------------------------------------------------
+
+void meow_radix_2_dit_i
+(
+ const Meow_FFT_Complex* w_n
+ , Meow_FFT_Complex* out
+ , unsigned count
+)
+{
+ // butteryfly 0 always has the twiddle factor == 1.0f
+ // so special case that one.
+ {
+ Complex z0 = out[0];
+ Complex z1 = out[count];
+
+ out[0] = meow_add(z0, z1);
+ out[count] = meow_sub(z0, z1);
+ }
+
+ for (unsigned butterfly = 1; butterfly < count; ++butterfly)
+ {
+ Complex w = w_n[butterfly - 1];
+
+ const unsigned i0 = butterfly;
+ const unsigned i1 = butterfly + count;
+
+ Complex z0 = out[i0];
+ Complex z1 = meow_mul(out[i1], w);
+
+ out[i0] = meow_add(z0, z1);
+ out[i1] = meow_sub(z0, z1);
+ // Equation 135
+ }
+}
+
+void meow_radix_3_dit_i
+(
+ const Meow_FFT_Complex* w_n
+ , Meow_FFT_Complex* out
+ , unsigned count
+)
+{
+ unsigned wi = 0u;
+
+ // W[0] is always 1.0f;
+ {
+ const unsigned i0 = 0 * count;
+ const unsigned i1 = 1 * count;
+ const unsigned i2 = 2 * count;
+
+ Complex z0 = out[i0];
+ Complex z1 = out[i1];
+ Complex z2 = out[i2];
+
+ Complex t1 = meow_add(z1, z2);
+ Complex t2 = meow_sub(z0, meow_mulf(t1, 0.5));
+ Complex t3j = meow_mul_by_j
+ (
+ meow_mulf(meow_sub(z1, z2), -MEOW_SIN_PI_3)
+ );
+
+ out[i0] = meow_add(z0, t1);
+ out[i1] = meow_add(t2, t3j);
+ out[i2] = meow_sub(t2, t3j);
+ }
+
+ for (unsigned butterfly = 1; butterfly < count; butterfly++, wi+=2)
+ {
+ Complex w1 = w_n[wi + 0];
+ Complex w2 = w_n[wi + 1];
+
+ const unsigned i0 = butterfly;
+ const unsigned i1 = butterfly + count;
+ const unsigned i2 = butterfly + 2 * count;
+
+ Complex z0 = out[i0];
+ Complex z1 = meow_mul(w1, out[i1]);
+ Complex z2 = meow_mul(w2, out[i2]);
+
+ Complex t1 = meow_add(z1, z2);
+ Complex t2 = meow_sub(z0, meow_mulf(t1, 0.5));
+ Complex t3j = meow_mul_by_j
+ (
+ meow_mulf(meow_sub(z1, z2), -MEOW_SIN_PI_3)
+ );
+ // Equation 136
+
+ out[i0] = meow_add(z0, t1);
+ out[i1] = meow_add(t2, t3j);
+ out[i2] = meow_sub(t2, t3j);
+ // Equation 137
+ }
+}
+
+void meow_radix_4_dit_i
+(
+ const Meow_FFT_Complex* w_n
+ , Meow_FFT_Complex* out
+ , unsigned count
+)
+{
+ unsigned wi = 0u;
+
+ // W[0] is always 1.0f;
+ {
+ const unsigned i0 = 0 * count;
+ const unsigned i1 = 1 * count;
+ const unsigned i2 = 2 * count;
+ const unsigned i3 = 3 * count;
+
+ Complex z0 = out[i0];
+ Complex z1 = out[i1];
+ Complex z2 = out[i2];
+ Complex z3 = out[i3];
+
+ Complex t1 = meow_add(z0, z2);
+ Complex t2 = meow_add(z1, z3);
+ Complex t3 = meow_sub(z0, z2);
+ Complex t4j = meow_mul_by_j(meow_sub(z1, z3));
+
+ out[i0] = meow_add(t1, t2);
+ out[i1] = meow_add(t3, t4j);
+ out[i2] = meow_sub(t1, t2);
+ out[i3] = meow_sub(t3, t4j);
+ }
+
+ for (unsigned butterfly = 1; butterfly < count; ++butterfly, wi+=3)
+ {
+ Complex w1 = w_n[wi + 0];
+ Complex w2 = w_n[wi + 1];
+ Complex w3 = w_n[wi + 2];
+
+ const unsigned i0 = butterfly + 0 * count;
+ const unsigned i1 = butterfly + 1 * count;
+ const unsigned i2 = butterfly + 2 * count;
+ const unsigned i3 = butterfly + 3 * count;
+
+ Complex z0 = out[i0];
+ Complex z1 = meow_mul(w1, out[i1]);
+ Complex z2 = meow_mul(w2, out[i2]);
+ Complex z3 = meow_mul(w3, out[i3]);
+
+ Complex t1 = meow_add(z0, z2);
+ Complex t2 = meow_add(z1, z3);
+ Complex t3 = meow_sub(z0, z2);
+
+ Complex t4j = meow_mul_by_j(meow_sub(z1, z3));
+ // Equations 138
+ // Also instead of conjugating the input and multplying with the
+ // twiddles for the ifft, we invert the twiddles instead. This works
+ // fine except here, the mul_by_j is assuming that it's the forward
+ // fft twiddle we are multiplying with, not the conjugated one we
+ // actually have. So we have to conjugate it _back_ if we are doing the
+ // ifft.
+ // Also, had to multiply by -j, not j for reasons I am yet to grasp.
+
+ out[i0] = meow_add(t1, t2);
+ out[i1] = meow_add(t3, t4j);
+ out[i2] = meow_sub(t1, t2);
+ out[i3] = meow_sub(t3, t4j);
+ // Equations 139
+ }
+}
+
+void meow_radix_5_dit_i
+(
+ const Meow_FFT_Complex* w_n
+ , Meow_FFT_Complex* out
+ , unsigned count
+)
+{
+ unsigned wi = 0u;
+
+ // W[0] is always 1.0f;
+ {
+ const unsigned i0 = 0 * count;
+ const unsigned i1 = 1 * count;
+ const unsigned i2 = 2 * count;
+ const unsigned i3 = 3 * count;
+ const unsigned i4 = 4 * count;
+
+ Complex z0 = out[i0];
+ Complex z1 = out[i1];
+ Complex z2 = out[i2];
+ Complex z3 = out[i3];
+ Complex z4 = out[i4];
+
+ Complex t1 = meow_add(z1, z4);
+ Complex t2 = meow_add(z2, z3);
+ Complex t3 = meow_sub(z1, z4);
+ Complex t4 = meow_sub(z2, z3);
+ // Equations 140
+
+ Complex t5 = meow_add(t1, t2);
+ Complex t6 = meow_mulf(meow_sub(t1, t2), MEOW_SQR_5_DIV_4);
+ Complex t7 = meow_sub(z0, meow_mulf(t5, 0.25f));
+ // Equation 141
+
+ Complex t8 = meow_add(t7, t6);
+ Complex t9 = meow_sub(t7, t6);
+ // Equation 142
+
+ Complex t10j = meow_mul_by_j
+ (
+ meow_add
+ (
+ meow_mulf(t3, -MEOW_SIN_2PI_5)
+ , meow_mulf(t4, -MEOW_SIN_2PI_10)
+ )
+ );
+
+ Complex t11j = meow_mul_by_j
+ (
+ meow_sub
+ (
+ meow_mulf(t3, -MEOW_SIN_2PI_10)
+ , meow_mulf(t4, -MEOW_SIN_2PI_5)
+ )
+ );
+ // Equation 143
+
+ out[i0] = meow_add(z0, t5);
+ // Equation 144
+
+ out[i1] = meow_add(t8, t10j);
+ out[i2] = meow_add(t9, t11j);
+ // Equation 145
+
+ out[i3] = meow_sub(t9, t11j);
+ out[i4] = meow_sub(t8, t10j);
+ // Equation 146
+ }
+
+ for (unsigned butterfly = 1; butterfly < count; ++butterfly, wi+=4)
+ {
+ Complex w1 = w_n[wi + 0];
+ Complex w2 = w_n[wi + 1];
+ Complex w3 = w_n[wi + 2];
+ Complex w4 = w_n[wi + 3];
+
+ const unsigned i0 = butterfly + 0 * count;
+ const unsigned i1 = butterfly + 1 * count;
+ const unsigned i2 = butterfly + 2 * count;
+ const unsigned i3 = butterfly + 3 * count;
+ const unsigned i4 = butterfly + 4 * count;
+
+ Complex z0 = out[i0];
+ Complex z1 = meow_mul(w1, out[i1]);
+ Complex z2 = meow_mul(w2, out[i2]);
+ Complex z3 = meow_mul(w3, out[i3]);
+ Complex z4 = meow_mul(w4, out[i4]);
+
+ Complex t1 = meow_add(z1, z4);
+ Complex t2 = meow_add(z2, z3);
+ Complex t3 = meow_sub(z1, z4);
+ Complex t4 = meow_sub(z2, z3);
+ // Equations 140
+
+ Complex t5 = meow_add(t1, t2);
+ Complex t6 = meow_mulf(meow_sub(t1, t2), MEOW_SQR_5_DIV_4);
+ Complex t7 = meow_sub(z0, meow_mulf(t5, 0.25f));
+ // Equation 141
+
+ Complex t8 = meow_add(t7, t6);
+ Complex t9 = meow_sub(t7, t6);
+ // Equation 142
+
+ Complex t10j = meow_mul_by_j
+ (
+ meow_add
+ (
+ meow_mulf(t3, -MEOW_SIN_2PI_5)
+ , meow_mulf(t4, -MEOW_SIN_2PI_10)
+ )
+ );
+
+ Complex t11j = meow_mul_by_j
+ (
+ meow_sub
+ (
+ meow_mulf(t3, -MEOW_SIN_2PI_10)
+ , meow_mulf(t4, -MEOW_SIN_2PI_5)
+ )
+ );
+ // Equation 143
+
+ out[i0] = meow_add(z0, t5);
+ // Equation 144
+
+ out[i1] = meow_add(t8, t10j);
+ out[i2] = meow_add(t9, t11j);
+ // Equation 145
+
+ out[i3] = meow_sub(t9, t11j);
+ out[i4] = meow_sub(t8, t10j);
+ // Equation 146
+ }
+}
+
+static void meow_radix_8_dit_i
+(
+ const Meow_FFT_Complex* w_n
+ , Meow_FFT_Complex* out
+ , unsigned count
+)
+{
+ const Meow_Float* W = &w_n[0].r;
+ {
+ Meow_Float T3;
+ Meow_Float T37;
+ Meow_Float T18;
+ Meow_Float T23;
+ Meow_Float T6;
+ Meow_Float T24;
+ Meow_Float T21;
+ Meow_Float T38;
+ Meow_Float T13;
+ Meow_Float T49;
+ Meow_Float T35;
+ Meow_Float T43;
+ Meow_Float T10;
+ Meow_Float T48;
+ Meow_Float T30;
+ Meow_Float T42;
+ {
+ Meow_Float T1;
+ Meow_Float T2;
+ Meow_Float T19;
+ Meow_Float T20;
+ T1 = out[0].r;
+ T2 = out[count * 4].r;
+ T3 = T1 + T2;
+ T37 = T1 - T2;
+ {
+ Meow_Float T16;
+ Meow_Float T17;
+ Meow_Float T4;
+ Meow_Float T5;
+ T16 = out[0].j;
+ T17 = out[count * 4].j;
+ T18 = T16 + T17;
+ T23 = T16 - T17;
+ T4 = out[count * 2].r;
+ T5 = out[count * 6].r;
+ T6 = T4 + T5;
+ T24 = T4 - T5;
+ }
+ T19 = out[count * 2].j;
+ T20 = out[count * 6].j;
+ T21 = T19 + T20;
+ T38 = T19 - T20;
+ {
+ Meow_Float T11;
+ Meow_Float T12;
+ Meow_Float T31;
+ Meow_Float T32;
+ Meow_Float T33;
+ Meow_Float T34;
+ T11 = out[count * 7].r;
+ T12 = out[count * 3].r;
+ T31 = T11 - T12;
+ T32 = out[count * 7].j;
+ T33 = out[count * 3].j;
+ T34 = T32 - T33;
+ T13 = T11 + T12;
+ T49 = T32 + T33;
+ T35 = T31 + T34;
+ T43 = T34 - T31;
+ }
+ {
+ Meow_Float T8;
+ Meow_Float T9;
+ Meow_Float T26;
+ Meow_Float T27;
+ Meow_Float T28;
+ Meow_Float T29;
+ T8 = out[count * 1].r;
+ T9 = out[count * 5].r;
+ T26 = T8 - T9;
+ T27 = out[count * 1].j;
+ T28 = out[count * 5].j;
+ T29 = T27 - T28;
+ T10 = T8 + T9;
+ T48 = T27 + T28;
+ T30 = T26 - T29;
+ T42 = T26 + T29;
+ }
+ }
+ {
+ Meow_Float T7;
+ Meow_Float T14;
+ Meow_Float T47;
+ Meow_Float T50;
+ T7 = T3 + T6;
+ T14 = T10 + T13;
+ out[count * 4].r = T7 - T14;
+ out[0].r = T7 + T14;
+ T47 = T18 + T21;
+ T50 = T48 + T49;
+ out[count * 4].j = T47 - T50;
+ out[0].j = T47 + T50;
+ }
+ {
+ Meow_Float T15;
+ Meow_Float T22;
+ Meow_Float T51;
+ Meow_Float T52;
+ T15 = T10 - T13;
+ T22 = T18 - T21;
+ out[count * 2].j = T15 + T22;
+ out[count * 6].j = T22 - T15;
+ T51 = T3 - T6;
+ T52 = T49 - T48;
+ out[count * 6].r = T51 - T52;
+ out[count * 2].r = T51 + T52;
+ }
+ {
+ Meow_Float T25;
+ Meow_Float T36;
+ Meow_Float T45;
+ Meow_Float T46;
+ T25 = T23 - T24;
+ T36 = MEOW_1_DIV_SQR_2 * (T30 - T35);
+ out[count * 7].j = T25 - T36;
+ out[count * 3].j = T25 + T36;
+ T45 = T37 + T38;
+ T46 = MEOW_1_DIV_SQR_2 * (T43 - T42);
+ out[count * 7].r = T45 - T46;
+ out[count * 3].r = T45 + T46;
+ }
+ {
+ Meow_Float T39;
+ Meow_Float T40;
+ Meow_Float T41;
+ Meow_Float T44;
+ T39 = T37 - T38;
+ T40 = MEOW_1_DIV_SQR_2 * (T30 + T35);
+ out[count * 5].r = T39 - T40;
+ out[count * 1].r = T39 + T40;
+ T41 = T24 + T23;
+ T44 = MEOW_1_DIV_SQR_2 * (T42 + T43);
+ out[count * 5].j = T41 - T44;
+ out[count * 1].j = T41 + T44;
+ }
+ }
+
+ out = out + 1;
+
+ {
+ unsigned m;
+ for (m = 1; m < count; m = m + 1, out = out + 1, W = W + 14)
+ {
+ Meow_Float T7;
+ Meow_Float T77;
+ Meow_Float T43;
+ Meow_Float T71;
+ Meow_Float T41;
+ Meow_Float T64;
+ Meow_Float T53;
+ Meow_Float T56;
+ Meow_Float T18;
+ Meow_Float T76;
+ Meow_Float T46;
+ Meow_Float T68;
+ Meow_Float T30;
+ Meow_Float T65;
+ Meow_Float T48;
+ Meow_Float T51;
+ {
+ Meow_Float T1;
+ Meow_Float T70;
+ Meow_Float T6;
+ Meow_Float T69;
+ T1 = out[0].r;
+ T70 = out[0].j;
+ {
+ Meow_Float T3;
+ Meow_Float T5;
+ Meow_Float T2;
+ Meow_Float T4;
+ T3 = out[count * 4].r;
+ T5 = out[count * 4].j;
+ T2 = W[6];
+ T4 = W[7];
+ T6 = (T2 * T3) - (T4 * T5);
+ T69 = (T4 * T3) + (T2 * T5);
+ }
+ T7 = T1 + T6;
+ T77 = T70 - T69;
+ T43 = T1 - T6;
+ T71 = T69 + T70;
+ }
+ {
+ Meow_Float T35;
+ Meow_Float T54;
+ Meow_Float T40;
+ Meow_Float T55;
+ {
+ Meow_Float T32;
+ Meow_Float T34;
+ Meow_Float T31;
+ Meow_Float T33;
+ T32 = out[count * 7].r;
+ T34 = out[count * 7].j;
+ T31 = W[12];
+ T33 = W[13];
+ T35 = (T31 * T32) - (T33 * T34);
+ T54 = (T33 * T32) + (T31 * T34);
+ }
+ {
+ Meow_Float T37;
+ Meow_Float T39;
+ Meow_Float T36;
+ Meow_Float T38;
+ T37 = out[count * 3].r;
+ T39 = out[count * 3].j;
+ T36 = W[4];
+ T38 = W[5];
+ T40 = (T36 * T37) - (T38 * T39);
+ T55 = (T38 * T37) + (T36 * T39);
+ }
+ T41 = T35 + T40;
+ T64 = T54 + T55;
+ T53 = T35 - T40;
+ T56 = T54 - T55;
+ }
+ {
+ Meow_Float T12;
+ Meow_Float T44;
+ Meow_Float T17;
+ Meow_Float T45;
+ {
+ Meow_Float T9;
+ Meow_Float T11;
+ Meow_Float T8;
+ Meow_Float T10;
+ T9 = out[count * 2].r;
+ T11 = out[count * 2].j;
+ T8 = W[2];
+ T10 = W[3];
+ T12 = (T8 * T9) - (T10 * T11);
+ T44 = (T10 * T9) + (T8 * T11);
+ }
+ {
+ Meow_Float T14;
+ Meow_Float T16;
+ Meow_Float T13;
+ Meow_Float T15;
+ T14 = out[count * 6].r;
+ T16 = out[count * 6].j;
+ T13 = W[10];
+ T15 = W[11];
+ T17 = (T13 * T14) - (T15 * T16);
+ T45 = (T15 * T14) + (T13 * T16);
+ }
+ T18 = T12 + T17;
+ T76 = T12 - T17;
+ T46 = T44 - T45;
+ T68 = T44 + T45;
+ }
+ {
+ Meow_Float T24;
+ Meow_Float T49;
+ Meow_Float T29;
+ Meow_Float T50;
+ {
+ Meow_Float T21;
+ Meow_Float T23;
+ Meow_Float T20;
+ Meow_Float T22;
+ T21 = out[count * 1].r;
+ T23 = out[count * 1].j;
+ T20 = W[0];
+ T22 = W[1];
+ T24 = (T20 * T21) - (T22 * T23);
+ T49 = (T22 * T21) + (T20 * T23);
+ }
+ {
+ Meow_Float T26;
+ Meow_Float T28;
+ Meow_Float T25;
+ Meow_Float T27;
+ T26 = out[count * 5].r;
+ T28 = out[count * 5].j;
+ T25 = W[8];
+ T27 = W[9];
+ T29 = (T25 * T26) - (T27 * T28);
+ T50 = (T27 * T26) + (T25 * T28);
+ }
+ T30 = T24 + T29;
+ T65 = T49 + T50;
+ T48 = T24 - T29;
+ T51 = T49 - T50;
+ }
+ {
+ Meow_Float T19;
+ Meow_Float T42;
+ Meow_Float T73;
+ Meow_Float T74;
+ T19 = T7 + T18;
+ T42 = T30 + T41;
+ out[count * 4].r = T19 - T42;
+ out[0].r = T19 + T42;
+ {
+ Meow_Float T67;
+ Meow_Float T72;
+ Meow_Float T63;
+ Meow_Float T66;
+ T67 = T65 + T64;
+ T72 = T68 + T71;
+ out[0].j = T67 + T72;
+ out[count * 4].j = T72 - T67;
+ T63 = T7 - T18;
+ T66 = T64 - T65;
+ out[count * 6].r = T63 - T66;
+ out[count * 2].r = T63 + T66;
+ }
+ T73 = T30 - T41;
+ T74 = T71 - T68;
+ out[count * 2].j = T73 + T74;
+ out[count * 6].j = T74 - T73;
+ {
+ Meow_Float T59;
+ Meow_Float T78;
+ Meow_Float T62;
+ Meow_Float T75;
+ Meow_Float T60;
+ Meow_Float T61;
+ T59 = T43 + T46;
+ T78 = T76 + T77;
+ T60 = T56 - T53;
+ T61 = T48 + T51;
+ T62 = MEOW_1_DIV_SQR_2 * (T60 - T61);
+ T75 = MEOW_1_DIV_SQR_2 * (T61 + T60);
+ out[count * 7].r = T59 - T62;
+ out[count * 5].j = T78 - T75;
+ out[count * 3].r = T59 + T62;
+ out[count * 1].j = T75 + T78;
+ }
+ {
+ Meow_Float T47;
+ Meow_Float T80;
+ Meow_Float T58;
+ Meow_Float T79;
+ Meow_Float T52;
+ Meow_Float T57;
+ T47 = T43 - T46;
+ T80 = T77 - T76;
+ T52 = T48 - T51;
+ T57 = T53 + T56;
+ T58 = MEOW_1_DIV_SQR_2 * (T52 + T57);
+ T79 = MEOW_1_DIV_SQR_2 * (T52 - T57);
+ out[count * 5].r = T47 - T58;
+ out[count * 7].j = T80 - T79;
+ out[count * 1].r = T47 + T58;
+ out[count * 3].j = T79 + T80;
+ }
+ }
+ }
+ }
+}
+
+// -----------------------------------------------------------------------------
+
+// Paraphrased from kiss-fft
+void meow_recursive_fft_mixed_meow_radix_dit
+(
+ const Meow_FFT_Workset* fft
+ , unsigned stage
+ , Complex* in
+ , Meow_FFT_Complex* out
+ , unsigned w_mul
+)
+{
+ const unsigned radix = fft->stages.radix[stage];
+ const unsigned count = fft->stages.remainder[stage];
+
+ Complex* w = fft->wn;
+ const unsigned w_offset = fft->stages.offsets[stage];
+ Complex* w_sequential = &fft->wn_ordered[w_offset];
+
+ if (count == 1)
+ {
+ for (unsigned i = 0; i < radix; i++)
+ {
+ out[i] = in[i * w_mul];
+ }
+ }
+ else
+ {
+ const unsigned new_w_multiplier = w_mul * radix;
+
+ for (unsigned i = 0; i < radix; ++i)
+ {
+ meow_recursive_fft_mixed_meow_radix_dit
+ (
+ fft
+ , stage + 1
+ , &in[w_mul * i]
+ , &out[count * i]
+ , new_w_multiplier
+ );
+ }
+ }
+
+ switch (radix)
+ {
+ case 2: meow_radix_2_dit(w_sequential, out, count); break;
+ case 3: meow_radix_3_dit(w_sequential, out, count); break;
+ case 4: meow_radix_4_dit(w_sequential, out, count); break;
+ case 5: meow_radix_5_dit(w_sequential, out, count); break;
+ case 8: meow_radix_8_dit(w_sequential, out, count); break;
+
+ default: meow_dft_n_dit(w, out, count, w_mul, radix, fft->N, 0); break;
+ }
+}
+
+void meow_recursive_fft_mixed_meow_radix_dit_i
+(
+ const Meow_FFT_Workset* fft
+ , unsigned stage
+ , Complex* in
+ , Meow_FFT_Complex* out
+ , unsigned w_mul
+)
+{
+ const unsigned radix = fft->stages.radix[stage];
+ const unsigned count = fft->stages.remainder[stage];
+
+ Complex* w = fft->wn;
+ const unsigned w_offset = fft->stages.offsets[stage];
+ Complex* w_sequential = &fft->wn_ordered[w_offset];
+
+ if (count == 1)
+ {
+ for (unsigned i = 0; i < radix; i++)
+ {
+ out[i] = in[i * w_mul];
+ }
+ }
+ else
+ {
+ const unsigned new_w_multiplier = w_mul * radix;
+
+ for (unsigned i = 0; i < radix; ++i)
+ {
+ meow_recursive_fft_mixed_meow_radix_dit_i
+ (
+ fft
+ , stage + 1
+ , &in[w_mul * i]
+ , &out[count * i]
+ , new_w_multiplier
+ );
+ }
+ }
+
+ switch (radix)
+ {
+ case 2: meow_radix_2_dit_i(w_sequential, out, count); break;
+ case 3: meow_radix_3_dit_i(w_sequential, out, count); break;
+ case 4: meow_radix_4_dit_i(w_sequential, out, count); break;
+ case 5: meow_radix_5_dit_i(w_sequential, out, count); break;
+ case 8: meow_radix_8_dit_i(w_sequential, out, count); break;
+
+ default: meow_dft_n_dit(w, out, count, w_mul, radix, fft->N, 1); break;
+ }
+}
+
+// -----------------------------------------------------------------------------
+//
+// http://www.engineeringproductivitytools.com/stuff/T0001/PT10.HTM
+// I finally figured out why this page confused me so much. It wasn't
+// _consistent_ with formular chunks. Sometimes with would include j, othertimes
+// it wouldn't. Sometimes it would include Wk, othertimes not. Ugh. No wonder
+// my maths was wrong by the wrong twiddle or incorrect sign.
+//
+// So the magic forumlar is:
+//
+// Z() == two-for-one-fft result waiting for final tiwddle
+// F() == result fft, what we want
+// Wn() == twiddle factor for N
+// Wn2() == twiddle factor for N/2
+//
+// Note for fft Wn() == e^(-j*2*pi*k/N)
+// Note for ifft Wn() == e^( j*2*pi*k/N) // <--- NOTICE MISSING '-'!
+
+// For FFT
+// k = 0
+
+// F(0) = Z(0).real + Z(0).imag
+// F(N/2) = Z(0).real - Z(0).imag
+
+// k > 0
+// Feven_a(k) = Z(k) + Z(N/2 - k)*
+// Fodd_a(k) = Z(k) - Z(N/2 - k)*
+//
+// Feven = Feven_a(k)
+// Fodd = -j * Fodd_a(k)
+//
+// F(k) = 0.5 * (Feven + (Wn(k) * Fodd))
+
+// -----------------------------------------------------------------------------
+
+// For IFFT (think the twiddle is DIF hence not * 0.5)
+// k = 0
+
+// Z(0).real = F(0).real + F(N/2).real
+// Z(0).imag = F(0).real - F(N/2).real
+
+// k > 0
+// Zeven_a(k) = F(k) + F(N/2 - k)*
+// Zodd_a(k) = F(k) - F(N/2 - k)*
+//
+// Feven = Feven_a(k)
+// Fodd = j * Fodd_a(k) // <---- NOTICE missing '-'!
+//
+// F(k) = Feven + (Wn(k) * Fodd) // <---- Remember ifft twiddles!, no * 0.5.
+
+inline void meow_mixer
+(
+ unsigned N_2
+ , Complex* w_2n
+ , Complex* in
+ , Meow_FFT_Complex* out
+)
+{
+ // looking at kiss_fft they use double symmetery, so we only need to
+ // actaully do N/4 twiddles. engineeringproductivitytools mentions something
+ // similar as well.
+
+ const unsigned N_4 = N_2 / 2u;
+
+ for (unsigned k = 1; k <= N_4; k++)
+ {
+ Complex x_k = in[k];
+ Complex x_n_2_minus_k = meow_conjugate(in[N_2 - k]);
+ Complex wk = meow_conjugate(w_2n[k]);
+
+ Complex za = meow_add(x_k, x_n_2_minus_k);
+ Complex zb = meow_sub(x_k, x_n_2_minus_k);
+
+ Complex x_even = za;
+
+ Complex x_odd = meow_negate(meow_mul_by_j(zb));
+
+ Complex wk_x_odd = meow_mul(x_odd, wk);
+ Complex x_k_sum = meow_add(x_even, wk_x_odd);
+ Complex x_n_2_minus_k_sum = meow_conjugate(meow_sub(x_even, wk_x_odd));
+
+ Complex x_k_out = meow_mulf(x_k_sum , 0.5f);
+ Complex x_n_2_minus_k_out = meow_mulf(x_n_2_minus_k_sum, 0.5f);
+
+ out[k] = x_k_out;
+ out[N_2 - k] = x_n_2_minus_k_out;
+ }
+}
+
+inline void meow_mixer_i
+(
+ unsigned N_2
+ , Complex* w_2n
+ , Complex* in
+ , Meow_FFT_Complex* out
+)
+{
+ const unsigned N_4 = N_2 / 2u;
+
+ for (unsigned k = 1; k <= N_4; k++)
+ {
+ Complex x_k = in[k];
+ Complex x_n_2_minus_k = meow_conjugate(in[N_2 - k]);
+ Complex wk = w_2n[k];
+
+ Complex za = meow_add(x_k, x_n_2_minus_k);
+ Complex zb = meow_sub(x_k, x_n_2_minus_k);
+
+ Complex x_even = za;
+
+ Complex x_odd = meow_mul_by_j(zb);
+
+ Complex wk_x_odd = meow_mul(x_odd, wk);
+ Complex x_k_sum = meow_add(x_even, wk_x_odd);
+ Complex x_n_2_minus_k_sum = meow_conjugate(meow_sub(x_even, wk_x_odd));
+
+ Complex x_k_out = x_k_sum;
+ Complex x_n_2_minus_k_out = x_n_2_minus_k_sum;
+
+ out[k] = x_k_out;
+ out[N_2 - k] = x_n_2_minus_k_out;
+ }
+}
+
+// -----------------------------------------------------------------------------
+
+void meow_fft_real
+(
+ const Meow_FFT_Workset_Real* fft
+ , const Meow_Float* in
+ , Meow_FFT_Complex* out
+)
+{
+ // Need two sets of twiddles. One set for N/2, and one set for N.
+ // However for the N set, we only need N/4 twiddles due to symmetry * 2.
+
+ const unsigned N_2 = fft->half.N;
+ Complex* magic = fft->w_2n;
+ Meow_FFT_Complex z0;
+
+ meow_recursive_fft_mixed_meow_radix_dit
+ (
+ &fft->half
+ , 0
+ , (Complex*)(in)
+ , out
+ , 1
+ );
+
+ z0 = out[0];
+
+ out[0].r = z0.r + z0.j;
+ out[0].j = z0.r - z0.j;
+ // combine 0, and N_2 into the same number in order
+ // to keep the array size N/2
+
+ meow_mixer(N_2, magic, out, out);
+}
+
+void meow_fft_real_i
+(
+ const Meow_FFT_Workset_Real* ifft
+ , const Meow_FFT_Complex* in
+ , Meow_FFT_Complex* temp
+ , Meow_Float* out
+)
+{
+ const unsigned N_2 = ifft->half.N;
+ Complex* magic = ifft->w_2n;
+
+ temp[0].r = in[0].r + in[0].j;
+ temp[0].j = in[0].r - in[0].j;
+
+ meow_mixer_i(N_2, magic, in, temp);
+
+ meow_recursive_fft_mixed_meow_radix_dit_i
+ (
+ &ifft->half
+ , 0
+ , temp
+ , (Meow_FFT_Complex*)(out)
+ , 1
+ );
+}
+
+void meow_fft
+(
+ const Meow_FFT_Workset* data
+ , const Meow_FFT_Complex* in
+ , Meow_FFT_Complex* out
+)
+{
+ meow_recursive_fft_mixed_meow_radix_dit
+ (
+ data
+ , 0
+ , in
+ , out
+ , 1
+ );
+}
+
+void meow_fft_i
+(
+ const Meow_FFT_Workset* data
+ , const Meow_FFT_Complex* in
+ , Meow_FFT_Complex* out
+)
+{
+ meow_recursive_fft_mixed_meow_radix_dit_i
+ (
+ data
+ , 0
+ , in
+ , out
+ , 1
+ );
+}
+
+#endif
+
+// bash script used to generate radix N codelets from fftw that suit this code.
+// since my tests run slower with > 8 radix, I hand modified the radix 8
+// generated (function signature) instead of updating this code.
+#if 0
+#!/bin/sh
+# <command> N [-1|1] [|_i]
+
+cat << EOF
+
+static void meow_radix_${1}_dit${3}
+(
+ meow_fft_complex* out
+ , const Meow_Float* W
+ , unsigned count
+)
+{
+EOF
+
+#// First loop doesn't use twiddles
+./gen_notw.native -n ${1} -standalone -sign ${2} \
+ | sed 's/E /Meow_Float /g' \
+ | sed '/INT.*/d' \
+ | sed -r 's/r[io]\[(.+)]/out\[\1\].r/g' \
+ | sed -r 's/i[io]\[(.+)]/out\[\1\].j/g' \
+ | sed '/for (.*).*/d' \
+ | sed -r 's/WS\(.., (.*)\)/count * \1/g' \
+ | sed -r 's/FMA\((.+), (.+), (.+)\)/\(\1 * \2\) + \(\3\)/g' \
+ | sed -r 's/FMS\((.+), (.+), (.+)\)/\(\1 * \2\) - \(\3\)/g' \
+ | sed -r 's/FNMA\((.+), (.+), (.+)\)/-\(\1 * \2\) + \(\3\)/g' \
+ | sed -r 's/FNMS\((.+), (.+), (.+)\)/\(\3\) - \(\1 * \2\)/g' \
+ | sed -r 's/DK\((.+), (.+)\);/static const Meow_Float \1 = \2;/g' \
+ | head -n -3 \
+ | tail -n +9
+
+echo ""
+echo "out = out + 1;"
+echo ""
+
+./gen_twiddle.native -n ${1} -standalone -sign ${2} -dit -with-ms 1 \
+ | sed 's/E /Meow_Float /g' \
+ | sed 's/INT /unsigned /g' \
+ | sed -r 's/r[io]\[(.+)]/out\[\1\].r/g' \
+ | sed -r 's/i[io]\[(.+)]/out\[\1\].j/g' \
+ | sed 's/, MAKE_VOLATILE_STRIDE(.*))/)/g' \
+ | sed 's/, MAKE_VOLATILE_STRIDE(.*)//g' \
+ | sed -r 's/WS\(.., (.*)\)/count * \1/g' \
+ | sed -r 's/FMA\((.+), (.+), (.+)\)/\(\1 * \2\) + \(\3\)/g' \
+ | sed -r 's/FMS\((.+), (.+), (.+)\)/\(\1 * \2\) - \(\3\)/g' \
+ | sed -r 's/FNMA\((.+), (.+), (.+)\)/-\(\1 * \2\) + \(\3\)/g' \
+ | sed -r 's/FNMS\((.+), (.+), (.+)\)/\(\3\) - \(\1 * \2\)/g' \
+ | sed '/DK(.*);/d' \
+ | sed 's/ri = ri + 1, ii = ii + 1,/out = out + 1,/g' \
+ | sed 's/m = mb, W = W + (mb * .*);/m = 1;/g' \
+ | sed -r 's/(for \(.*\)).*/\1\n{/g' \
+ | sed 's/me/count/g' \
+ | head -n -2 \
+ | tail -n +10
+
+
+echo "}"
+#endif
--
2.37.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [igt-dev] [PATCH i-g-t 3/3] lib/igt_audio: Replace GSL FFT usage with meow_fft
2022-08-09 12:17 [igt-dev] [PATCH i-g-t 0/3] Switch the FFT library from GSL to meow_fft Ryszard Knop
2022-08-09 12:17 ` [igt-dev] [PATCH i-g-t 1/3] lib/uwildmat: Move to a dedicated vendored library directory Ryszard Knop
2022-08-09 12:18 ` [igt-dev] [PATCH i-g-t 2/3] lib/vendor: Add the meow_fft library Ryszard Knop
@ 2022-08-09 12:18 ` Ryszard Knop
2022-08-09 13:17 ` [igt-dev] ✓ Fi.CI.BAT: success for Switch the FFT library from GSL to meow_fft Patchwork
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Ryszard Knop @ 2022-08-09 12:18 UTC (permalink / raw)
To: Development mailing list for IGT GPU Tools
Tested by running kms_chamelium tests related with audio and comparing
GSL and meow_fft outputs in a separate test program. It appears meow_fft
is slightly less accurate than GSL (result differs after the 6th decimal
place), but the error is low enough that it does not matter here.
Signed-off-by: Ryszard Knop <ryszard.knop@intel.com>
---
lib/igt_audio.c | 79 ++++++++++++++++++++++++++++++++++++++-----------
1 file changed, 62 insertions(+), 17 deletions(-)
diff --git a/lib/igt_audio.c b/lib/igt_audio.c
index e0b1bafe..19aa5eb7 100644
--- a/lib/igt_audio.c
+++ b/lib/igt_audio.c
@@ -28,12 +28,15 @@
#include <errno.h>
#include <fcntl.h>
-#include <gsl/gsl_fft_real.h>
#include <math.h>
#include <unistd.h>
+#include <limits.h>
-#include "igt_audio.h"
+#include "meow_fft/meow_fft.h"
+
+#include "igt_aux.h"
#include "igt_core.h"
+#include "igt_audio.h"
#define FREQS_MAX 64
#define CHANNELS_MAX 8
@@ -322,6 +325,52 @@ static double hann_window(double v, size_t i, size_t N)
return v * 0.5 * (1 - cos(2.0 * M_PI * (double) i / (double) N));
}
+/**
+ * run_fft:
+ * @array: The signal to run FFT on
+ * @length: The signal buffer length (must be a power of 2)
+ *
+ * Run the Fast Fourier Transform on the provided signal, whose
+ * length must be a power of 2. The return value points to an
+ * array of N/2 structs with real (.r) and imaginary (.j) parts.
+ *
+ * For the 0-th FFT element, only the real part is valid - its
+ * imaginary part is always 0 and is not saved anywhere.
+ *
+ * For the (N/2)-th element, again, only the real part is valid.
+ * The array does not have enough space to save it as a separate
+ * element, so its real part is saved in the 0-th element's
+ * imaginary part.
+ */
+static Meow_FFT_Complex *run_fft(double *array, size_t length) {
+ size_t workset_bytes;
+ Meow_FFT_Complex *fft_data;
+ struct Meow_FFT_Workset_Real* fft_workset;
+
+ igt_assert(length >= 2 && is_power_of_two(length));
+
+ // Get size for a N point fft working on non-complex (real) data.
+ workset_bytes = meow_fft_generate_workset_real(length, NULL);
+ if (workset_bytes == 0)
+ return NULL;
+
+ fft_data = malloc(sizeof(Meow_FFT_Complex) * length);
+ if (fft_data == NULL)
+ return NULL;
+
+ fft_workset = (struct Meow_FFT_Workset_Real*) malloc(workset_bytes);
+ if (fft_workset == NULL) {
+ free(fft_data);
+ return NULL;
+ }
+
+ meow_fft_generate_workset_real(length, fft_workset);
+ meow_fft_real(fft_workset, array, fft_data);
+ free(fft_workset);
+
+ return fft_data;
+}
+
/**
* Checks that frequencies specified in signal, and only those, are included
* in the input data.
@@ -333,11 +382,12 @@ bool audio_signal_detect(struct audio_signal *signal, int sampling_rate,
int channel, const double *samples, size_t samples_len)
{
double *data;
+ Meow_FFT_Complex *fft_data;
size_t data_len = samples_len;
size_t bin_power_len = data_len / 2 + 1;
double bin_power[bin_power_len];
bool detected[FREQS_MAX];
- int ret, freq_accuracy, freq, local_max_freq;
+ int freq_accuracy, freq, local_max_freq;
double max, local_max, threshold;
size_t i, j;
bool above, success;
@@ -360,27 +410,21 @@ bool audio_signal_detect(struct audio_signal *signal, int sampling_rate,
freq_accuracy = sampling_rate / data_len;
igt_debug("Allowed freq. error: %d Hz\n", freq_accuracy);
- ret = gsl_fft_real_radix2_transform(data, 1, data_len);
- if (ret != 0) {
+ fft_data = run_fft(data, data_len);
+ if (fft_data == NULL) {
free(data);
igt_assert(0);
}
- /* Compute the power received by every bin of the FFT.
- *
- * For i < data_len / 2, the real part of the i-th term is stored at
- * data[i] and its imaginary part is stored at data[data_len - i].
- * i = 0 and i = data_len / 2 are special cases, they are purely real
- * so their imaginary part isn't stored.
- *
+ /* Compute the power received by every bin of the FFT. The run_fft
+ * function docs explain the special cases outside of the for loop.
* The power is encoded as the magnitude of the complex number and the
- * phase is encoded as its angle.
- */
- bin_power[0] = data[0];
+ * phase is encoded as its angle. */
+ bin_power[0] = fft_data[0].r;
for (i = 1; i < bin_power_len - 1; i++) {
- bin_power[i] = hypot(data[i], data[data_len - i]);
+ bin_power[i] = hypot(fft_data[i].r, fft_data[i].j);
}
- bin_power[bin_power_len - 1] = data[data_len / 2];
+ bin_power[bin_power_len - 1] = fft_data[0].j;
/* Normalize the power */
for (i = 0; i < bin_power_len; i++)
@@ -487,6 +531,7 @@ bool audio_signal_detect(struct audio_signal *signal, int sampling_rate,
}
}
+ free(fft_data);
free(data);
return success;
--
2.37.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [igt-dev] ✓ Fi.CI.BAT: success for Switch the FFT library from GSL to meow_fft
2022-08-09 12:17 [igt-dev] [PATCH i-g-t 0/3] Switch the FFT library from GSL to meow_fft Ryszard Knop
` (2 preceding siblings ...)
2022-08-09 12:18 ` [igt-dev] [PATCH i-g-t 3/3] lib/igt_audio: Replace GSL FFT usage with meow_fft Ryszard Knop
@ 2022-08-09 13:17 ` Patchwork
2022-08-09 17:01 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
2024-08-22 19:46 ` ✗ Fi.CI.BUILD: failure for Switch the FFT library from GSL to meow_fft (rev2) Patchwork
5 siblings, 0 replies; 7+ messages in thread
From: Patchwork @ 2022-08-09 13:17 UTC (permalink / raw)
To: Ryszard Knop; +Cc: igt-dev
[-- Attachment #1: Type: text/plain, Size: 7806 bytes --]
== Series Details ==
Series: Switch the FFT library from GSL to meow_fft
URL : https://patchwork.freedesktop.org/series/107093/
State : success
== Summary ==
CI Bug Log - changes from CI_DRM_11976 -> IGTPW_7624
====================================================
Summary
-------
**SUCCESS**
No regressions found.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/index.html
Participating hosts (43 -> 41)
------------------------------
Additional (1): fi-kbl-soraka
Missing (3): fi-ctg-p8600 fi-ilk-m540 fi-hsw-4200u
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in IGTPW_7624:
### IGT changes ###
#### Suppressed ####
The following results come from untrusted machines, tests, or statuses.
They do not affect the overall result.
* igt@core_hotunplug@unbind-rebind:
- {bat-dg2-10}: NOTRUN -> [DMESG-WARN][1]
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/bat-dg2-10/igt@core_hotunplug@unbind-rebind.html
Known issues
------------
Here are the changes found in IGTPW_7624 that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@gem_exec_gttfill@basic:
- fi-kbl-soraka: NOTRUN -> [SKIP][2] ([fdo#109271]) +8 similar issues
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/fi-kbl-soraka/igt@gem_exec_gttfill@basic.html
* igt@gem_huc_copy@huc-copy:
- fi-kbl-soraka: NOTRUN -> [SKIP][3] ([fdo#109271] / [i915#2190])
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/fi-kbl-soraka/igt@gem_huc_copy@huc-copy.html
* igt@gem_lmem_swapping@basic:
- fi-kbl-soraka: NOTRUN -> [SKIP][4] ([fdo#109271] / [i915#4613]) +3 similar issues
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/fi-kbl-soraka/igt@gem_lmem_swapping@basic.html
* igt@i915_selftest@live@gt_pm:
- fi-kbl-soraka: NOTRUN -> [DMESG-FAIL][5] ([i915#1886])
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/fi-kbl-soraka/igt@i915_selftest@live@gt_pm.html
* igt@i915_selftest@live@hangcheck:
- bat-dg1-6: [PASS][6] -> [DMESG-FAIL][7] ([i915#4494] / [i915#4957])
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/bat-dg1-6/igt@i915_selftest@live@hangcheck.html
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/bat-dg1-6/igt@i915_selftest@live@hangcheck.html
* igt@kms_chamelium@hdmi-hpd-fast:
- fi-kbl-soraka: NOTRUN -> [SKIP][8] ([fdo#109271] / [fdo#111827]) +7 similar issues
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/fi-kbl-soraka/igt@kms_chamelium@hdmi-hpd-fast.html
* igt@kms_cursor_legacy@basic-busy-flip-before-cursor@atomic-transitions-varying-size:
- fi-bsw-kefka: [PASS][9] -> [FAIL][10] ([i915#6298])
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/fi-bsw-kefka/igt@kms_cursor_legacy@basic-busy-flip-before-cursor@atomic-transitions-varying-size.html
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/fi-bsw-kefka/igt@kms_cursor_legacy@basic-busy-flip-before-cursor@atomic-transitions-varying-size.html
* igt@runner@aborted:
- fi-bdw-5557u: NOTRUN -> [FAIL][11] ([i915#4312])
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/fi-bdw-5557u/igt@runner@aborted.html
#### Possible fixes ####
* igt@gem_exec_suspend@basic-s0@smem:
- {bat-rplp-1}: [DMESG-WARN][12] ([i915#2867]) -> [PASS][13]
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/bat-rplp-1/igt@gem_exec_suspend@basic-s0@smem.html
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/bat-rplp-1/igt@gem_exec_suspend@basic-s0@smem.html
* igt@i915_module_load@load:
- {bat-dg2-10}: [DMESG-WARN][14] -> [PASS][15]
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/bat-dg2-10/igt@i915_module_load@load.html
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/bat-dg2-10/igt@i915_module_load@load.html
* igt@i915_pm_rpm@basic-rte:
- {bat-dg2-8}: [DMESG-WARN][16] -> [PASS][17]
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/bat-dg2-8/igt@i915_pm_rpm@basic-rte.html
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/bat-dg2-8/igt@i915_pm_rpm@basic-rte.html
* igt@i915_selftest@live@hangcheck:
- {fi-jsl-1}: [INCOMPLETE][18] ([i915#5134]) -> [PASS][19]
[18]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/fi-jsl-1/igt@i915_selftest@live@hangcheck.html
[19]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/fi-jsl-1/igt@i915_selftest@live@hangcheck.html
- bat-dg1-5: [DMESG-FAIL][20] ([i915#4494] / [i915#4957]) -> [PASS][21]
[20]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/bat-dg1-5/igt@i915_selftest@live@hangcheck.html
[21]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/bat-dg1-5/igt@i915_selftest@live@hangcheck.html
* igt@i915_suspend@basic-s3-without-i915:
- fi-bdw-5557u: [INCOMPLETE][22] ([i915#146]) -> [PASS][23]
[22]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/fi-bdw-5557u/igt@i915_suspend@basic-s3-without-i915.html
[23]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/fi-bdw-5557u/igt@i915_suspend@basic-s3-without-i915.html
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
[fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
[fdo#109285]: https://bugs.freedesktop.org/show_bug.cgi?id=109285
[fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827
[i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072
[i915#1155]: https://gitlab.freedesktop.org/drm/intel/issues/1155
[i915#146]: https://gitlab.freedesktop.org/drm/intel/issues/146
[i915#1886]: https://gitlab.freedesktop.org/drm/intel/issues/1886
[i915#2190]: https://gitlab.freedesktop.org/drm/intel/issues/2190
[i915#2867]: https://gitlab.freedesktop.org/drm/intel/issues/2867
[i915#3291]: https://gitlab.freedesktop.org/drm/intel/issues/3291
[i915#3555]: https://gitlab.freedesktop.org/drm/intel/issues/3555
[i915#3708]: https://gitlab.freedesktop.org/drm/intel/issues/3708
[i915#4077]: https://gitlab.freedesktop.org/drm/intel/issues/4077
[i915#4312]: https://gitlab.freedesktop.org/drm/intel/issues/4312
[i915#4494]: https://gitlab.freedesktop.org/drm/intel/issues/4494
[i915#4579]: https://gitlab.freedesktop.org/drm/intel/issues/4579
[i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
[i915#4873]: https://gitlab.freedesktop.org/drm/intel/issues/4873
[i915#4957]: https://gitlab.freedesktop.org/drm/intel/issues/4957
[i915#4983]: https://gitlab.freedesktop.org/drm/intel/issues/4983
[i915#5087]: https://gitlab.freedesktop.org/drm/intel/issues/5087
[i915#5134]: https://gitlab.freedesktop.org/drm/intel/issues/5134
[i915#5270]: https://gitlab.freedesktop.org/drm/intel/issues/5270
[i915#5354]: https://gitlab.freedesktop.org/drm/intel/issues/5354
[i915#5828]: https://gitlab.freedesktop.org/drm/intel/issues/5828
[i915#6257]: https://gitlab.freedesktop.org/drm/intel/issues/6257
[i915#6298]: https://gitlab.freedesktop.org/drm/intel/issues/6298
[i915#6531]: https://gitlab.freedesktop.org/drm/intel/issues/6531
Build changes
-------------
* CI: CI-20190529 -> None
* IGT: IGT_6619 -> IGTPW_7624
CI-20190529: 20190529
CI_DRM_11976: 33740045ce83ed20c52a6f213faadb0443bc40f3 @ git://anongit.freedesktop.org/gfx-ci/linux
IGTPW_7624: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/index.html
IGT_6619: ec2ab8e3a151ce05bd2726319c528c2ab99e8a96 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/index.html
[-- Attachment #2: Type: text/html, Size: 8029 bytes --]
^ permalink raw reply [flat|nested] 7+ messages in thread
* [igt-dev] ✓ Fi.CI.IGT: success for Switch the FFT library from GSL to meow_fft
2022-08-09 12:17 [igt-dev] [PATCH i-g-t 0/3] Switch the FFT library from GSL to meow_fft Ryszard Knop
` (3 preceding siblings ...)
2022-08-09 13:17 ` [igt-dev] ✓ Fi.CI.BAT: success for Switch the FFT library from GSL to meow_fft Patchwork
@ 2022-08-09 17:01 ` Patchwork
2024-08-22 19:46 ` ✗ Fi.CI.BUILD: failure for Switch the FFT library from GSL to meow_fft (rev2) Patchwork
5 siblings, 0 replies; 7+ messages in thread
From: Patchwork @ 2022-08-09 17:01 UTC (permalink / raw)
To: Ryszard Knop; +Cc: igt-dev
[-- Attachment #1: Type: text/plain, Size: 53834 bytes --]
== Series Details ==
Series: Switch the FFT library from GSL to meow_fft
URL : https://patchwork.freedesktop.org/series/107093/
State : success
== Summary ==
CI Bug Log - changes from CI_DRM_11976_full -> IGTPW_7624_full
====================================================
Summary
-------
**SUCCESS**
No regressions found.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/index.html
Participating hosts (13 -> 10)
------------------------------
Missing (3): pig-skl-6260u pig-kbl-iris pig-glk-j5005
New tests
---------
New tests have been introduced between CI_DRM_11976_full and IGTPW_7624_full:
### New IGT tests (5) ###
* igt@gem_mmap_offset@ptrace@fixed:
- Statuses : 1 pass(s)
- Exec time: [0.03] s
* igt@kms_busy@extended-modeset-hang-oldfb@pipe-a:
- Statuses : 8 pass(s)
- Exec time: [6.11, 16.59] s
* igt@kms_busy@extended-modeset-hang-oldfb@pipe-b:
- Statuses : 1 pass(s)
- Exec time: [6.00] s
* igt@kms_busy@extended-modeset-hang-oldfb@pipe-c:
- Statuses : 4 pass(s)
- Exec time: [6.91, 9.01] s
* igt@kms_busy@extended-modeset-hang-oldfb@pipe-d:
- Statuses : 3 pass(s)
- Exec time: [14.94, 17.02] s
Known issues
------------
Here are the changes found in IGTPW_7624_full that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@drm_buddy@all:
- shard-iclb: NOTRUN -> [SKIP][1] ([i915#6433]) +1 similar issue
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb1/igt@drm_buddy@all.html
- shard-tglb: NOTRUN -> [SKIP][2] ([i915#6433])
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-tglb2/igt@drm_buddy@all.html
* igt@drm_mm@all:
- shard-kbl: NOTRUN -> [SKIP][3] ([fdo#109271]) +86 similar issues
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-kbl7/igt@drm_mm@all.html
* igt@gem_ctx_isolation@preservation-s3@vcs0:
- shard-kbl: [PASS][4] -> [DMESG-WARN][5] ([i915#180]) +5 similar issues
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-kbl4/igt@gem_ctx_isolation@preservation-s3@vcs0.html
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-kbl7/igt@gem_ctx_isolation@preservation-s3@vcs0.html
* igt@gem_ctx_persistence@legacy-engines-persistence:
- shard-snb: NOTRUN -> [SKIP][6] ([fdo#109271] / [i915#1099])
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-snb6/igt@gem_ctx_persistence@legacy-engines-persistence.html
* igt@gem_eio@unwedge-stress:
- shard-iclb: NOTRUN -> [TIMEOUT][7] ([i915#3070])
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb4/igt@gem_eio@unwedge-stress.html
- shard-snb: NOTRUN -> [FAIL][8] ([i915#3354])
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-snb5/igt@gem_eio@unwedge-stress.html
- shard-tglb: NOTRUN -> [FAIL][9] ([i915#5784])
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-tglb2/igt@gem_eio@unwedge-stress.html
* igt@gem_exec_balancer@parallel-out-fence:
- shard-iclb: [PASS][10] -> [SKIP][11] ([i915#4525]) +2 similar issues
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-iclb4/igt@gem_exec_balancer@parallel-out-fence.html
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb3/igt@gem_exec_balancer@parallel-out-fence.html
* igt@gem_exec_fair@basic-none-share@rcs0:
- shard-tglb: [PASS][12] -> [FAIL][13] ([i915#2842])
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-tglb2/igt@gem_exec_fair@basic-none-share@rcs0.html
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-tglb7/igt@gem_exec_fair@basic-none-share@rcs0.html
- shard-iclb: [PASS][14] -> [FAIL][15] ([i915#2842])
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-iclb3/igt@gem_exec_fair@basic-none-share@rcs0.html
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb6/igt@gem_exec_fair@basic-none-share@rcs0.html
* igt@gem_exec_fair@basic-pace@rcs0:
- shard-glk: [PASS][16] -> [FAIL][17] ([i915#2842]) +2 similar issues
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-glk5/igt@gem_exec_fair@basic-pace@rcs0.html
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-glk3/igt@gem_exec_fair@basic-pace@rcs0.html
* igt@gem_exec_params@no-bsd:
- shard-tglb: NOTRUN -> [SKIP][18] ([fdo#109283])
[18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-tglb3/igt@gem_exec_params@no-bsd.html
* igt@gem_exec_params@secure-non-root:
- shard-tglb: NOTRUN -> [SKIP][19] ([fdo#112283])
[19]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-tglb7/igt@gem_exec_params@secure-non-root.html
- shard-iclb: NOTRUN -> [SKIP][20] ([fdo#112283])
[20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb6/igt@gem_exec_params@secure-non-root.html
* igt@gem_exec_schedule@wide@bcs0:
- shard-kbl: [PASS][21] -> [INCOMPLETE][22] ([i915#5304])
[21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-kbl1/igt@gem_exec_schedule@wide@bcs0.html
[22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-kbl7/igt@gem_exec_schedule@wide@bcs0.html
* igt@gem_lmem_swapping@heavy-verify-multi-ccs:
- shard-iclb: NOTRUN -> [SKIP][23] ([i915#4613])
[23]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb1/igt@gem_lmem_swapping@heavy-verify-multi-ccs.html
* igt@gem_lmem_swapping@parallel-random:
- shard-kbl: NOTRUN -> [SKIP][24] ([fdo#109271] / [i915#4613]) +1 similar issue
[24]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-kbl7/igt@gem_lmem_swapping@parallel-random.html
* igt@gem_pread@exhaustion:
- shard-iclb: NOTRUN -> [WARN][25] ([i915#2658])
[25]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb5/igt@gem_pread@exhaustion.html
* igt@gem_pxp@verify-pxp-stale-buf-execution:
- shard-iclb: NOTRUN -> [SKIP][26] ([i915#4270])
[26]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb4/igt@gem_pxp@verify-pxp-stale-buf-execution.html
* igt@gem_render_copy@y-tiled-ccs-to-y-tiled-mc-ccs:
- shard-glk: NOTRUN -> [SKIP][27] ([fdo#109271]) +22 similar issues
[27]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-glk8/igt@gem_render_copy@y-tiled-ccs-to-y-tiled-mc-ccs.html
- shard-iclb: NOTRUN -> [SKIP][28] ([i915#768])
[28]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb6/igt@gem_render_copy@y-tiled-ccs-to-y-tiled-mc-ccs.html
* igt@gen7_exec_parse@chained-batch:
- shard-tglb: NOTRUN -> [SKIP][29] ([fdo#109289]) +2 similar issues
[29]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-tglb3/igt@gen7_exec_parse@chained-batch.html
- shard-iclb: NOTRUN -> [SKIP][30] ([fdo#109289]) +1 similar issue
[30]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb3/igt@gen7_exec_parse@chained-batch.html
* igt@gen9_exec_parse@bb-start-out:
- shard-tglb: NOTRUN -> [SKIP][31] ([i915#2527] / [i915#2856]) +1 similar issue
[31]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-tglb2/igt@gen9_exec_parse@bb-start-out.html
- shard-iclb: NOTRUN -> [SKIP][32] ([i915#2856])
[32]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb1/igt@gen9_exec_parse@bb-start-out.html
* igt@i915_pm_dc@dc6-dpms:
- shard-iclb: [PASS][33] -> [FAIL][34] ([i915#454])
[33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-iclb6/igt@i915_pm_dc@dc6-dpms.html
[34]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb3/igt@i915_pm_dc@dc6-dpms.html
* igt@i915_selftest@live@hangcheck:
- shard-tglb: [PASS][35] -> [DMESG-WARN][36] ([i915#5591])
[35]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-tglb7/igt@i915_selftest@live@hangcheck.html
[36]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-tglb2/igt@i915_selftest@live@hangcheck.html
* igt@kms_atomic@atomic_plane_damage:
- shard-iclb: NOTRUN -> [SKIP][37] ([i915#4765])
[37]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb8/igt@kms_atomic@atomic_plane_damage.html
* igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-0-hflip-async-flip:
- shard-iclb: NOTRUN -> [SKIP][38] ([i915#5286]) +3 similar issues
[38]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb1/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-0-hflip-async-flip.html
* igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180:
- shard-tglb: NOTRUN -> [SKIP][39] ([i915#5286]) +1 similar issue
[39]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-tglb2/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180.html
* igt@kms_ccs@pipe-a-ccs-on-another-bo-y_tiled_gen12_rc_ccs_cc:
- shard-apl: NOTRUN -> [SKIP][40] ([fdo#109271] / [i915#3886]) +1 similar issue
[40]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-apl8/igt@kms_ccs@pipe-a-ccs-on-another-bo-y_tiled_gen12_rc_ccs_cc.html
- shard-glk: NOTRUN -> [SKIP][41] ([fdo#109271] / [i915#3886]) +1 similar issue
[41]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-glk2/igt@kms_ccs@pipe-a-ccs-on-another-bo-y_tiled_gen12_rc_ccs_cc.html
* igt@kms_ccs@pipe-a-crc-primary-rotation-180-4_tiled_dg2_rc_ccs:
- shard-tglb: NOTRUN -> [SKIP][42] ([i915#3689] / [i915#6095]) +1 similar issue
[42]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-tglb7/igt@kms_ccs@pipe-a-crc-primary-rotation-180-4_tiled_dg2_rc_ccs.html
* igt@kms_ccs@pipe-a-crc-sprite-planes-basic-y_tiled_gen12_rc_ccs_cc:
- shard-iclb: NOTRUN -> [SKIP][43] ([fdo#109278] / [i915#3886]) +2 similar issues
[43]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb5/igt@kms_ccs@pipe-a-crc-sprite-planes-basic-y_tiled_gen12_rc_ccs_cc.html
* igt@kms_ccs@pipe-b-random-ccs-data-y_tiled_gen12_mc_ccs:
- shard-tglb: NOTRUN -> [SKIP][44] ([i915#3689] / [i915#3886])
[44]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-tglb2/igt@kms_ccs@pipe-b-random-ccs-data-y_tiled_gen12_mc_ccs.html
* igt@kms_ccs@pipe-c-bad-aux-stride-y_tiled_gen12_rc_ccs_cc:
- shard-kbl: NOTRUN -> [SKIP][45] ([fdo#109271] / [i915#3886]) +4 similar issues
[45]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-kbl4/igt@kms_ccs@pipe-c-bad-aux-stride-y_tiled_gen12_rc_ccs_cc.html
* igt@kms_ccs@pipe-c-crc-sprite-planes-basic-4_tiled_dg2_rc_ccs_cc:
- shard-iclb: NOTRUN -> [SKIP][46] ([fdo#109278]) +2 similar issues
[46]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb3/igt@kms_ccs@pipe-c-crc-sprite-planes-basic-4_tiled_dg2_rc_ccs_cc.html
* igt@kms_ccs@pipe-c-missing-ccs-buffer-yf_tiled_ccs:
- shard-tglb: NOTRUN -> [SKIP][47] ([fdo#111615] / [i915#3689]) +1 similar issue
[47]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-tglb2/igt@kms_ccs@pipe-c-missing-ccs-buffer-yf_tiled_ccs.html
* igt@kms_ccs@pipe-d-random-ccs-data-y_tiled_ccs:
- shard-tglb: NOTRUN -> [SKIP][48] ([i915#3689])
[48]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-tglb7/igt@kms_ccs@pipe-d-random-ccs-data-y_tiled_ccs.html
* igt@kms_chamelium@dp-hpd-storm:
- shard-iclb: NOTRUN -> [SKIP][49] ([fdo#109284] / [fdo#111827])
[49]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb3/igt@kms_chamelium@dp-hpd-storm.html
* igt@kms_chamelium@dp-mode-timings:
- shard-tglb: NOTRUN -> [SKIP][50] ([fdo#109284] / [fdo#111827])
[50]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-tglb2/igt@kms_chamelium@dp-mode-timings.html
* igt@kms_color_chamelium@gamma:
- shard-kbl: NOTRUN -> [SKIP][51] ([fdo#109271] / [fdo#111827]) +4 similar issues
[51]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-kbl4/igt@kms_color_chamelium@gamma.html
* igt@kms_content_protection@dp-mst-type-0:
- shard-tglb: NOTRUN -> [SKIP][52] ([i915#3116] / [i915#3299])
[52]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-tglb7/igt@kms_content_protection@dp-mst-type-0.html
* igt@kms_cursor_crc@cursor-suspend@pipe-b-dp-1:
- shard-apl: [PASS][53] -> [DMESG-WARN][54] ([i915#180])
[53]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-apl6/igt@kms_cursor_crc@cursor-suspend@pipe-b-dp-1.html
[54]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-apl8/igt@kms_cursor_crc@cursor-suspend@pipe-b-dp-1.html
* igt@kms_cursor_legacy@2x-long-flip-vs-cursor-atomic:
- shard-tglb: NOTRUN -> [SKIP][55] ([fdo#109274] / [fdo#111825])
[55]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-tglb5/igt@kms_cursor_legacy@2x-long-flip-vs-cursor-atomic.html
* igt@kms_cursor_legacy@basic-busy-flip-before-cursor:
- shard-tglb: NOTRUN -> [SKIP][56] ([i915#4103])
[56]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-tglb3/igt@kms_cursor_legacy@basic-busy-flip-before-cursor.html
- shard-iclb: NOTRUN -> [SKIP][57] ([i915#4103])
[57]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb8/igt@kms_cursor_legacy@basic-busy-flip-before-cursor.html
* igt@kms_cursor_legacy@flip-vs-cursor@atomic-transitions-varying-size:
- shard-glk: [PASS][58] -> [FAIL][59] ([i915#2346])
[58]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-glk5/igt@kms_cursor_legacy@flip-vs-cursor@atomic-transitions-varying-size.html
[59]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-glk3/igt@kms_cursor_legacy@flip-vs-cursor@atomic-transitions-varying-size.html
* igt@kms_draw_crc@draw-method-rgb565-blt-ytiled:
- shard-glk: [PASS][60] -> [DMESG-FAIL][61] ([i915#118] / [i915#1888])
[60]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-glk1/igt@kms_draw_crc@draw-method-rgb565-blt-ytiled.html
[61]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-glk7/igt@kms_draw_crc@draw-method-rgb565-blt-ytiled.html
* igt@kms_draw_crc@draw-method-xrgb2101010-pwrite-4tiled:
- shard-tglb: NOTRUN -> [SKIP][62] ([i915#5287]) +1 similar issue
[62]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-tglb2/igt@kms_draw_crc@draw-method-xrgb2101010-pwrite-4tiled.html
* igt@kms_dsc@dsc-with-bpp:
- shard-tglb: NOTRUN -> [SKIP][63] ([i915#3828])
[63]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-tglb7/igt@kms_dsc@dsc-with-bpp.html
- shard-iclb: NOTRUN -> [SKIP][64] ([i915#3828])
[64]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb4/igt@kms_dsc@dsc-with-bpp.html
* igt@kms_flip@2x-blocking-wf_vblank:
- shard-iclb: NOTRUN -> [SKIP][65] ([fdo#109274]) +7 similar issues
[65]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb4/igt@kms_flip@2x-blocking-wf_vblank.html
* igt@kms_flip@2x-plain-flip-fb-recreate:
- shard-tglb: NOTRUN -> [SKIP][66] ([fdo#109274] / [fdo#111825] / [i915#3637]) +4 similar issues
[66]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-tglb7/igt@kms_flip@2x-plain-flip-fb-recreate.html
* igt@kms_flip@blocking-wf_vblank@a-hdmi-a1:
- shard-glk: [PASS][67] -> [DMESG-WARN][68] ([i915#118] / [i915#1888])
[67]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-glk5/igt@kms_flip@blocking-wf_vblank@a-hdmi-a1.html
[68]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-glk7/igt@kms_flip@blocking-wf_vblank@a-hdmi-a1.html
* igt@kms_flip@flip-vs-suspend-interruptible@d-edp1:
- shard-tglb: [PASS][69] -> [DMESG-WARN][70] ([i915#2411] / [i915#2867])
[69]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-tglb7/igt@kms_flip@flip-vs-suspend-interruptible@d-edp1.html
[70]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-tglb3/igt@kms_flip@flip-vs-suspend-interruptible@d-edp1.html
* igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-upscaling@pipe-a-default-mode:
- shard-iclb: NOTRUN -> [SKIP][71] ([i915#2672]) +11 similar issues
[71]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb2/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-upscaling@pipe-a-default-mode.html
* igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling@pipe-a-valid-mode:
- shard-tglb: NOTRUN -> [SKIP][72] ([i915#2672]) +1 similar issue
[72]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-tglb2/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling@pipe-a-valid-mode.html
* igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling@pipe-a-valid-mode:
- shard-iclb: NOTRUN -> [SKIP][73] ([i915#2672] / [i915#3555])
[73]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb5/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling@pipe-a-valid-mode.html
* igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-onoff:
- shard-glk: [PASS][74] -> [FAIL][75] ([i915#1888] / [i915#2546])
[74]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-glk6/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-onoff.html
[75]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-glk7/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-onoff.html
* igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-mmap-cpu:
- shard-tglb: NOTRUN -> [SKIP][76] ([fdo#109280] / [fdo#111825]) +13 similar issues
[76]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-tglb2/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-mmap-cpu.html
* igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-onoff:
- shard-snb: NOTRUN -> [SKIP][77] ([fdo#109271]) +38 similar issues
[77]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-snb2/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-onoff.html
* igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-mmap-cpu:
- shard-tglb: NOTRUN -> [SKIP][78] ([i915#6497]) +6 similar issues
[78]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-tglb2/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-mmap-cpu.html
* igt@kms_frontbuffer_tracking@psr-2p-scndscrn-spr-indfb-onoff:
- shard-iclb: NOTRUN -> [SKIP][79] ([fdo#109280]) +9 similar issues
[79]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb4/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-spr-indfb-onoff.html
* igt@kms_hdr@bpc-switch-dpms:
- shard-iclb: NOTRUN -> [SKIP][80] ([i915#3555]) +1 similar issue
[80]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb2/igt@kms_hdr@bpc-switch-dpms.html
* igt@kms_hdr@bpc-switch-dpms@pipe-a-dp-1:
- shard-kbl: [PASS][81] -> [FAIL][82] ([i915#1188])
[81]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-kbl4/igt@kms_hdr@bpc-switch-dpms@pipe-a-dp-1.html
[82]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-kbl4/igt@kms_hdr@bpc-switch-dpms@pipe-a-dp-1.html
* igt@kms_multipipe_modeset@basic-max-pipe-crc-check:
- shard-tglb: NOTRUN -> [SKIP][83] ([i915#1839]) +1 similar issue
[83]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-tglb2/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html
- shard-iclb: NOTRUN -> [SKIP][84] ([i915#1839])
[84]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb5/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html
* igt@kms_plane_alpha_blend@pipe-a-alpha-basic:
- shard-kbl: NOTRUN -> [FAIL][85] ([fdo#108145] / [i915#265])
[85]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-kbl7/igt@kms_plane_alpha_blend@pipe-a-alpha-basic.html
* igt@kms_plane_alpha_blend@pipe-c-alpha-transparent-fb:
- shard-kbl: NOTRUN -> [FAIL][86] ([i915#265])
[86]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-kbl7/igt@kms_plane_alpha_blend@pipe-c-alpha-transparent-fb.html
* igt@kms_plane_multiple@atomic-pipe-a-tiling-yf:
- shard-tglb: NOTRUN -> [SKIP][87] ([fdo#111615]) +3 similar issues
[87]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-tglb3/igt@kms_plane_multiple@atomic-pipe-a-tiling-yf.html
* igt@kms_plane_scaling@plane-downscale-with-pixel-format-factor-0-25@pipe-d-edp-1:
- shard-tglb: NOTRUN -> [SKIP][88] ([i915#5176]) +3 similar issues
[88]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-tglb5/igt@kms_plane_scaling@plane-downscale-with-pixel-format-factor-0-25@pipe-d-edp-1.html
* igt@kms_plane_scaling@plane-downscale-with-pixel-format-factor-0-5@pipe-a-edp-1:
- shard-iclb: [PASS][89] -> [SKIP][90] ([i915#5176]) +2 similar issues
[89]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-iclb4/igt@kms_plane_scaling@plane-downscale-with-pixel-format-factor-0-5@pipe-a-edp-1.html
[90]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb2/igt@kms_plane_scaling@plane-downscale-with-pixel-format-factor-0-5@pipe-a-edp-1.html
* igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-5@pipe-b-edp-1:
- shard-iclb: [PASS][91] -> [SKIP][92] ([i915#5235]) +2 similar issues
[91]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-iclb4/igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-5@pipe-b-edp-1.html
[92]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb2/igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-5@pipe-b-edp-1.html
* igt@kms_prime@d3hot:
- shard-tglb: NOTRUN -> [SKIP][93] ([i915#6524])
[93]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-tglb2/igt@kms_prime@d3hot.html
* igt@kms_psr2_sf@plane-move-sf-dmg-area:
- shard-kbl: NOTRUN -> [SKIP][94] ([fdo#109271] / [i915#658])
[94]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-kbl7/igt@kms_psr2_sf@plane-move-sf-dmg-area.html
* igt@kms_psr2_su@frontbuffer-xrgb8888:
- shard-iclb: [PASS][95] -> [SKIP][96] ([fdo#109642] / [fdo#111068] / [i915#658])
[95]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-iclb2/igt@kms_psr2_su@frontbuffer-xrgb8888.html
[96]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb7/igt@kms_psr2_su@frontbuffer-xrgb8888.html
* igt@kms_psr@psr2_cursor_plane_move:
- shard-iclb: [PASS][97] -> [SKIP][98] ([fdo#109441]) +2 similar issues
[97]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-iclb2/igt@kms_psr@psr2_cursor_plane_move.html
[98]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb5/igt@kms_psr@psr2_cursor_plane_move.html
* igt@kms_psr@psr2_no_drrs:
- shard-iclb: NOTRUN -> [SKIP][99] ([fdo#109441])
[99]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb5/igt@kms_psr@psr2_no_drrs.html
* igt@kms_psr@psr2_primary_mmap_gtt:
- shard-apl: NOTRUN -> [SKIP][100] ([fdo#109271]) +24 similar issues
[100]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-apl4/igt@kms_psr@psr2_primary_mmap_gtt.html
- shard-tglb: NOTRUN -> [FAIL][101] ([i915#132] / [i915#3467]) +1 similar issue
[101]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-tglb5/igt@kms_psr@psr2_primary_mmap_gtt.html
* igt@kms_psr_stress_test@invalidate-primary-flip-overlay:
- shard-iclb: [PASS][102] -> [SKIP][103] ([i915#5519])
[102]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-iclb6/igt@kms_psr_stress_test@invalidate-primary-flip-overlay.html
[103]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb7/igt@kms_psr_stress_test@invalidate-primary-flip-overlay.html
* igt@kms_rotation_crc@primary-4-tiled-reflect-x-0:
- shard-tglb: NOTRUN -> [SKIP][104] ([i915#5289])
[104]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-tglb2/igt@kms_rotation_crc@primary-4-tiled-reflect-x-0.html
* igt@kms_vblank@pipe-a-ts-continuation-suspend:
- shard-kbl: NOTRUN -> [DMESG-WARN][105] ([i915#180])
[105]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-kbl7/igt@kms_vblank@pipe-a-ts-continuation-suspend.html
* igt@kms_vrr@flipline:
- shard-tglb: NOTRUN -> [SKIP][106] ([i915#3555])
[106]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-tglb2/igt@kms_vrr@flipline.html
* igt@kms_writeback@writeback-check-output:
- shard-iclb: NOTRUN -> [SKIP][107] ([i915#2437])
[107]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb7/igt@kms_writeback@writeback-check-output.html
* igt@nouveau_crc@ctx-flip-threshold-reset-after-capture:
- shard-tglb: NOTRUN -> [SKIP][108] ([i915#2530])
[108]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-tglb3/igt@nouveau_crc@ctx-flip-threshold-reset-after-capture.html
* igt@perf_pmu@module-unload:
- shard-tglb: [PASS][109] -> [DMESG-WARN][110] ([i915#2867])
[109]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-tglb2/igt@perf_pmu@module-unload.html
[110]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-tglb3/igt@perf_pmu@module-unload.html
* igt@prime_nv_api@i915_nv_import_twice_check_flink_name:
- shard-tglb: NOTRUN -> [SKIP][111] ([fdo#109291]) +2 similar issues
[111]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-tglb2/igt@prime_nv_api@i915_nv_import_twice_check_flink_name.html
* igt@prime_nv_pcopy@test3_3:
- shard-iclb: NOTRUN -> [SKIP][112] ([fdo#109291]) +2 similar issues
[112]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb8/igt@prime_nv_pcopy@test3_3.html
* igt@sysfs_clients@busy:
- shard-tglb: NOTRUN -> [SKIP][113] ([i915#2994])
[113]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-tglb7/igt@sysfs_clients@busy.html
* igt@sysfs_clients@fair-7:
- shard-kbl: NOTRUN -> [SKIP][114] ([fdo#109271] / [i915#2994])
[114]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-kbl4/igt@sysfs_clients@fair-7.html
#### Possible fixes ####
* igt@drm_read@short-buffer-block:
- {shard-rkl}: [SKIP][115] ([i915#4098]) -> [PASS][116]
[115]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-rkl-5/igt@drm_read@short-buffer-block.html
[116]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-rkl-6/igt@drm_read@short-buffer-block.html
* igt@fbdev@unaligned-write:
- {shard-rkl}: [SKIP][117] ([i915#2582]) -> [PASS][118]
[117]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-rkl-5/igt@fbdev@unaligned-write.html
[118]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-rkl-4/igt@fbdev@unaligned-write.html
* igt@gem_ctx_persistence@engines-hang@vcs0:
- {shard-dg1}: [FAIL][119] ([i915#4883]) -> [PASS][120] +1 similar issue
[119]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-dg1-15/igt@gem_ctx_persistence@engines-hang@vcs0.html
[120]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-dg1-18/igt@gem_ctx_persistence@engines-hang@vcs0.html
* igt@gem_eio@in-flight-contexts-1us:
- shard-tglb: [TIMEOUT][121] ([i915#3063]) -> [PASS][122]
[121]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-tglb2/igt@gem_eio@in-flight-contexts-1us.html
[122]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-tglb7/igt@gem_eio@in-flight-contexts-1us.html
* igt@gem_exec_balancer@parallel-bb-first:
- shard-iclb: [SKIP][123] ([i915#4525]) -> [PASS][124]
[123]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-iclb6/igt@gem_exec_balancer@parallel-bb-first.html
[124]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb4/igt@gem_exec_balancer@parallel-bb-first.html
* igt@gem_exec_fair@basic-deadline:
- shard-glk: [FAIL][125] ([i915#2846]) -> [PASS][126]
[125]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-glk2/igt@gem_exec_fair@basic-deadline.html
[126]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-glk9/igt@gem_exec_fair@basic-deadline.html
* igt@gem_exec_fair@basic-pace-share@rcs0:
- shard-glk: [FAIL][127] ([i915#2842]) -> [PASS][128] +1 similar issue
[127]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-glk6/igt@gem_exec_fair@basic-pace-share@rcs0.html
[128]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-glk5/igt@gem_exec_fair@basic-pace-share@rcs0.html
- {shard-rkl}: [FAIL][129] ([i915#2842]) -> [PASS][130]
[129]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-rkl-5/igt@gem_exec_fair@basic-pace-share@rcs0.html
[130]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-rkl-1/igt@gem_exec_fair@basic-pace-share@rcs0.html
* igt@gem_exec_fair@basic-pace@vecs0:
- shard-kbl: [FAIL][131] ([i915#2842]) -> [PASS][132] +3 similar issues
[131]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-kbl7/igt@gem_exec_fair@basic-pace@vecs0.html
[132]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-kbl4/igt@gem_exec_fair@basic-pace@vecs0.html
* igt@gem_huc_copy@huc-copy:
- shard-tglb: [SKIP][133] ([i915#2190]) -> [PASS][134]
[133]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-tglb7/igt@gem_huc_copy@huc-copy.html
[134]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-tglb2/igt@gem_huc_copy@huc-copy.html
* igt@gem_set_tiling_vs_blt@tiled-to-untiled:
- {shard-rkl}: [SKIP][135] ([i915#3281]) -> [PASS][136] +4 similar issues
[135]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-rkl-1/igt@gem_set_tiling_vs_blt@tiled-to-untiled.html
[136]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-rkl-5/igt@gem_set_tiling_vs_blt@tiled-to-untiled.html
* igt@i915_hangman@gt-engine-error@bcs0:
- {shard-rkl}: [SKIP][137] ([i915#6258]) -> [PASS][138]
[137]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-rkl-5/igt@i915_hangman@gt-engine-error@bcs0.html
[138]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-rkl-2/igt@i915_hangman@gt-engine-error@bcs0.html
* igt@i915_pm_dc@dc6-dpms:
- {shard-rkl}: [SKIP][139] ([i915#3361]) -> [PASS][140]
[139]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-rkl-5/igt@i915_pm_dc@dc6-dpms.html
[140]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-rkl-4/igt@i915_pm_dc@dc6-dpms.html
* igt@i915_pm_dc@dc9-dpms:
- shard-iclb: [SKIP][141] ([i915#4281]) -> [PASS][142]
[141]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-iclb3/igt@i915_pm_dc@dc9-dpms.html
[142]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb4/igt@i915_pm_dc@dc9-dpms.html
* igt@i915_pm_rpm@cursor:
- {shard-rkl}: [SKIP][143] ([i915#1849]) -> [PASS][144]
[143]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-rkl-1/igt@i915_pm_rpm@cursor.html
[144]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-rkl-6/igt@i915_pm_rpm@cursor.html
* igt@i915_selftest@live@gt_pm:
- {shard-rkl}: [DMESG-FAIL][145] ([i915#4258]) -> [PASS][146]
[145]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-rkl-6/igt@i915_selftest@live@gt_pm.html
[146]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-rkl-2/igt@i915_selftest@live@gt_pm.html
* igt@i915_suspend@fence-restore-tiled2untiled:
- shard-kbl: [DMESG-WARN][147] ([i915#180]) -> [PASS][148] +1 similar issue
[147]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-kbl7/igt@i915_suspend@fence-restore-tiled2untiled.html
[148]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-kbl1/igt@i915_suspend@fence-restore-tiled2untiled.html
* igt@kms_ccs@pipe-b-ccs-on-another-bo-y_tiled_gen12_rc_ccs_cc:
- {shard-rkl}: [SKIP][149] ([i915#1845] / [i915#4098]) -> [PASS][150] +22 similar issues
[149]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-rkl-1/igt@kms_ccs@pipe-b-ccs-on-another-bo-y_tiled_gen12_rc_ccs_cc.html
[150]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-rkl-6/igt@kms_ccs@pipe-b-ccs-on-another-bo-y_tiled_gen12_rc_ccs_cc.html
* igt@kms_cursor_legacy@flip-vs-cursor@atomic-transitions:
- shard-glk: [FAIL][151] ([i915#2346]) -> [PASS][152]
[151]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-glk5/igt@kms_cursor_legacy@flip-vs-cursor@atomic-transitions.html
[152]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-glk3/igt@kms_cursor_legacy@flip-vs-cursor@atomic-transitions.html
* igt@kms_cursor_legacy@flip-vs-cursor@toggle:
- shard-iclb: [FAIL][153] ([i915#2346]) -> [PASS][154] +2 similar issues
[153]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-iclb7/igt@kms_cursor_legacy@flip-vs-cursor@toggle.html
[154]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb7/igt@kms_cursor_legacy@flip-vs-cursor@toggle.html
* igt@kms_draw_crc@draw-method-xrgb8888-mmap-gtt-xtiled:
- {shard-rkl}: [SKIP][155] ([fdo#111314] / [i915#4098] / [i915#4369]) -> [PASS][156] +5 similar issues
[155]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-rkl-5/igt@kms_draw_crc@draw-method-xrgb8888-mmap-gtt-xtiled.html
[156]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-rkl-6/igt@kms_draw_crc@draw-method-xrgb8888-mmap-gtt-xtiled.html
* igt@kms_flip@flip-vs-suspend@a-edp1:
- shard-iclb: [INCOMPLETE][157] -> [PASS][158]
[157]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-iclb4/igt@kms_flip@flip-vs-suspend@a-edp1.html
[158]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb8/igt@kms_flip@flip-vs-suspend@a-edp1.html
* igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-16bpp-ytile-downscaling@pipe-a-default-mode:
- shard-iclb: [SKIP][159] ([i915#3555]) -> [PASS][160]
[159]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-iclb2/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-16bpp-ytile-downscaling@pipe-a-default-mode.html
[160]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb3/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-16bpp-ytile-downscaling@pipe-a-default-mode.html
* igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-mmap-cpu:
- {shard-dg1}: [FAIL][161] -> [PASS][162]
[161]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-dg1-16/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-mmap-cpu.html
[162]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-dg1-17/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-mmap-cpu.html
* igt@kms_frontbuffer_tracking@psr-1p-primscrn-indfb-plflip-blt:
- {shard-rkl}: [SKIP][163] ([i915#1849] / [i915#4098]) -> [PASS][164] +13 similar issues
[163]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-rkl-5/igt@kms_frontbuffer_tracking@psr-1p-primscrn-indfb-plflip-blt.html
[164]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-rkl-6/igt@kms_frontbuffer_tracking@psr-1p-primscrn-indfb-plflip-blt.html
* igt@kms_plane@pixel-format-source-clamping@pipe-b-planes:
- {shard-rkl}: [SKIP][165] ([i915#1849] / [i915#3558]) -> [PASS][166] +1 similar issue
[165]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-rkl-2/igt@kms_plane@pixel-format-source-clamping@pipe-b-planes.html
[166]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-rkl-6/igt@kms_plane@pixel-format-source-clamping@pipe-b-planes.html
* igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-pixel-formats@pipe-b-edp-1:
- shard-iclb: [SKIP][167] ([i915#5176]) -> [PASS][168] +1 similar issue
[167]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-iclb3/igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-pixel-formats@pipe-b-edp-1.html
[168]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb4/igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-pixel-formats@pipe-b-edp-1.html
* igt@kms_psr@psr2_sprite_mmap_gtt:
- shard-iclb: [SKIP][169] ([fdo#109441]) -> [PASS][170] +1 similar issue
[169]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-iclb4/igt@kms_psr@psr2_sprite_mmap_gtt.html
[170]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb2/igt@kms_psr@psr2_sprite_mmap_gtt.html
* igt@kms_psr@sprite_plane_onoff:
- {shard-rkl}: [SKIP][171] ([i915#1072]) -> [PASS][172] +1 similar issue
[171]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-rkl-5/igt@kms_psr@sprite_plane_onoff.html
[172]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-rkl-6/igt@kms_psr@sprite_plane_onoff.html
* igt@kms_psr_stress_test@flip-primary-invalidate-overlay:
- shard-iclb: [SKIP][173] ([i915#5519]) -> [PASS][174]
[173]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-iclb4/igt@kms_psr_stress_test@flip-primary-invalidate-overlay.html
[174]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb7/igt@kms_psr_stress_test@flip-primary-invalidate-overlay.html
* igt@kms_universal_plane@cursor-fb-leak-pipe-b:
- {shard-tglu}: [FAIL][175] -> [PASS][176]
[175]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-tglu-4/igt@kms_universal_plane@cursor-fb-leak-pipe-b.html
[176]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-tglu-3/igt@kms_universal_plane@cursor-fb-leak-pipe-b.html
* igt@kms_vblank@pipe-d-query-idle-hang:
- {shard-dg1}: [SKIP][177] -> [PASS][178]
[177]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-dg1-18/igt@kms_vblank@pipe-d-query-idle-hang.html
[178]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-dg1-12/igt@kms_vblank@pipe-d-query-idle-hang.html
* igt@perf@gen12-oa-tlb-invalidate:
- {shard-rkl}: [SKIP][179] ([fdo#109289]) -> [PASS][180]
[179]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-rkl-5/igt@perf@gen12-oa-tlb-invalidate.html
[180]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-rkl-1/igt@perf@gen12-oa-tlb-invalidate.html
* igt@sysfs_heartbeat_interval@precise@rcs0:
- {shard-dg1}: [FAIL][181] ([i915#1755]) -> [PASS][182] +7 similar issues
[181]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-dg1-16/igt@sysfs_heartbeat_interval@precise@rcs0.html
[182]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-dg1-19/igt@sysfs_heartbeat_interval@precise@rcs0.html
#### Warnings ####
* igt@gem_exec_balancer@parallel-ordering:
- shard-iclb: [SKIP][183] ([i915#4525]) -> [FAIL][184] ([i915#6117])
[183]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-iclb5/igt@gem_exec_balancer@parallel-ordering.html
[184]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb1/igt@gem_exec_balancer@parallel-ordering.html
* igt@gem_exec_fair@basic-none-rrul@rcs0:
- shard-iclb: [FAIL][185] ([i915#2842]) -> [FAIL][186] ([i915#2852])
[185]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-iclb3/igt@gem_exec_fair@basic-none-rrul@rcs0.html
[186]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb7/igt@gem_exec_fair@basic-none-rrul@rcs0.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-pri-shrfb-draw-mmap-cpu:
- shard-glk: [SKIP][187] ([fdo#109271] / [i915#1888]) -> [SKIP][188] ([fdo#109271])
[187]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-glk3/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-pri-shrfb-draw-mmap-cpu.html
[188]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-glk9/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-pri-shrfb-draw-mmap-cpu.html
* igt@kms_psr2_sf@overlay-plane-move-continuous-exceed-sf:
- shard-iclb: [SKIP][189] ([i915#658]) -> [SKIP][190] ([i915#2920]) +1 similar issue
[189]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-iclb7/igt@kms_psr2_sf@overlay-plane-move-continuous-exceed-sf.html
[190]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb2/igt@kms_psr2_sf@overlay-plane-move-continuous-exceed-sf.html
* igt@kms_psr2_sf@overlay-primary-update-sf-dmg-area:
- shard-iclb: [SKIP][191] ([fdo#111068] / [i915#658]) -> [SKIP][192] ([i915#2920])
[191]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-iclb1/igt@kms_psr2_sf@overlay-primary-update-sf-dmg-area.html
[192]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb2/igt@kms_psr2_sf@overlay-primary-update-sf-dmg-area.html
* igt@kms_psr2_sf@plane-move-sf-dmg-area:
- shard-iclb: [SKIP][193] ([i915#2920]) -> [SKIP][194] ([fdo#111068] / [i915#658])
[193]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11976/shard-iclb2/igt@kms_psr2_sf@plane-move-sf-dmg-area.html
[194]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/shard-iclb4/igt@kms_psr2_sf@plane-move-sf-dmg-area.html
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
[fdo#108145]: https://bugs.freedesktop.org/show_bug.cgi?id=108145
[fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
[fdo#109274]: https://bugs.freedesktop.org/show_bug.cgi?id=109274
[fdo#109278]: https://bugs.freedesktop.org/show_bug.cgi?id=109278
[fdo#109280]: https://bugs.freedesktop.org/show_bug.cgi?id=109280
[fdo#109283]: https://bugs.freedesktop.org/show_bug.cgi?id=109283
[fdo#109284]: https://bugs.freedesktop.org/show_bug.cgi?id=109284
[fdo#109289]: https://bugs.freedesktop.org/show_bug.cgi?id=109289
[fdo#109291]: https://bugs.freedesktop.org/show_bug.cgi?id=109291
[fdo#109295]: https://bugs.freedesktop.org/show_bug.cgi?id=109295
[fdo#109300]: https://bugs.freedesktop.org/show_bug.cgi?id=109300
[fdo#109302]: https://bugs.freedesktop.org/show_bug.cgi?id=109302
[fdo#109303]: https://bugs.freedesktop.org/show_bug.cgi?id=109303
[fdo#109308]: https://bugs.freedesktop.org/show_bug.cgi?id=109308
[fdo#109312]: https://bugs.freedesktop.org/show_bug.cgi?id=109312
[fdo#109314]: https://bugs.freedesktop.org/show_bug.cgi?id=109314
[fdo#109441]: https://bugs.freedesktop.org/show_bug.cgi?id=109441
[fdo#109642]: https://bugs.freedesktop.org/show_bug.cgi?id=109642
[fdo#110189]: https://bugs.freedesktop.org/show_bug.cgi?id=110189
[fdo#110723]: https://bugs.freedesktop.org/show_bug.cgi?id=110723
[fdo#111068]: https://bugs.freedesktop.org/show_bug.cgi?id=111068
[fdo#111314]: https://bugs.freedesktop.org/show_bug.cgi?id=111314
[fdo#111614]: https://bugs.freedesktop.org/show_bug.cgi?id=111614
[fdo#111615]: https://bugs.freedesktop.org/show_bug.cgi?id=111615
[fdo#111644]: https://bugs.freedesktop.org/show_bug.cgi?id=111644
[fdo#111656]: https://bugs.freedesktop.org/show_bug.cgi?id=111656
[fdo#111825]: https://bugs.freedesktop.org/show_bug.cgi?id=111825
[fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827
[fdo#112054]: https://bugs.freedesktop.org/show_bug.cgi?id=112054
[fdo#112283]: https://bugs.freedesktop.org/show_bug.cgi?id=112283
[i915#1063]: https://gitlab.freedesktop.org/drm/intel/issues/1063
[i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072
[i915#1099]: https://gitlab.freedesktop.org/drm/intel/issues/1099
[i915#1155]: https://gitlab.freedesktop.org/drm/intel/issues/1155
[i915#118]: https://gitlab.freedesktop.org/drm/intel/issues/118
[i915#1188]: https://gitlab.freedesktop.org/drm/intel/issues/1188
[i915#1257]: https://gitlab.freedesktop.org/drm/intel/issues/1257
[i915#132]: https://gitlab.freedesktop.org/drm/intel/issues/132
[i915#1397]: https://gitlab.freedesktop.org/drm/intel/issues/1397
[i915#1722]: https://gitlab.freedesktop.org/drm/intel/issues/1722
[i915#1755]: https://gitlab.freedesktop.org/drm/intel/issues/1755
[i915#180]: https://gitlab.freedesktop.org/drm/intel/issues/180
[i915#1825]: https://gitlab.freedesktop.org/drm/intel/issues/1825
[i915#1839]: https://gitlab.freedesktop.org/drm/intel/issues/1839
[i915#1845]: https://gitlab.freedesktop.org/drm/intel/issues/1845
[i915#1849]: https://gitlab.freedesktop.org/drm/intel/issues/1849
[i915#1888]: https://gitlab.freedesktop.org/drm/intel/issues/1888
[i915#1937]: https://gitlab.freedesktop.org/drm/intel/issues/1937
[i915#2190]: https://gitlab.freedesktop.org/drm/intel/issues/2190
[i915#2346]: https://gitlab.freedesktop.org/drm/intel/issues/2346
[i915#2410]: https://gitlab.freedesktop.org/drm/intel/issues/2410
[i915#2411]: https://gitlab.freedesktop.org/drm/intel/issues/2411
[i915#2433]: https://gitlab.freedesktop.org/drm/intel/issues/2433
[i915#2437]: https://gitlab.freedesktop.org/drm/intel/issues/2437
[i915#2527]: https://gitlab.freedesktop.org/drm/intel/issues/2527
[i915#2530]: https://gitlab.freedesktop.org/drm/intel/issues/2530
[i915#2546]: https://gitlab.freedesktop.org/drm/intel/issues/2546
[i915#2582]: https://gitlab.freedesktop.org/drm/intel/issues/2582
[i915#265]: https://gitlab.freedesktop.org/drm/intel/issues/265
[i915#2658]: https://gitlab.freedesktop.org/drm/intel/issues/2658
[i915#2672]: https://gitlab.freedesktop.org/drm/intel/issues/2672
[i915#2681]: https://gitlab.freedesktop.org/drm/intel/issues/2681
[i915#2705]: https://gitlab.freedesktop.org/drm/intel/issues/2705
[i915#280]: https://gitlab.freedesktop.org/drm/intel/issues/280
[i915#2842]: https://gitlab.freedesktop.org/drm/intel/issues/2842
[i915#2846]: https://gitlab.freedesktop.org/drm/intel/issues/2846
[i915#2852]: https://gitlab.freedesktop.org/drm/intel/issues/2852
[i915#2856]: https://gitlab.freedesktop.org/drm/intel/issues/2856
[i915#2867]: https://gitlab.freedesktop.org/drm/intel/issues/2867
[i915#2920]: https://gitlab.freedesktop.org/drm/intel/issues/2920
[i915#2994]: https://gitlab.freedesktop.org/drm/intel/issues/2994
[i915#3012]: https://gitlab.freedesktop.org/drm/intel/issues/3012
[i915#3063]: https://gitlab.freedesktop.org/drm/intel/issues/3063
[i915#3070]: https://gitlab.freedesktop.org/drm/intel/issues/3070
[i915#3116]: https://gitlab.freedesktop.org/drm/intel/issues/3116
[i915#3281]: https://gitlab.freedesktop.org/drm/intel/issues/3281
[i915#3282]: https://gitlab.freedesktop.org/drm/intel/issues/3282
[i915#3291]: https://gitlab.freedesktop.org/drm/intel/issues/3291
[i915#3297]: https://gitlab.freedesktop.org/drm/intel/issues/3297
[i915#3299]: https://gitlab.freedesktop.org/drm/intel/issues/3299
[i915#3318]: https://gitlab.freedesktop.org/drm/intel/issues/3318
[i915#3354]: https://gitlab.freedesktop.org/drm/intel/issues/3354
[i915#3361]: https://gitlab.freedesktop.org/drm/intel/issues/3361
[i915#3376]: https://gitlab.freedesktop.org/drm/intel/issues/3376
[i915#3458]: https://gitlab.freedesktop.org/drm/intel/issues/3458
[i915#3467]: https://gitlab.freedesktop.org/drm/intel/issues/3467
[i915#3539]: https://gitlab.freedesktop.org/drm/intel/issues/3539
[i915#3546]: https://gitlab.freedesktop.org/drm/intel/issues/3546
[i915#3555]: https://gitlab.freedesktop.org/drm/intel/issues/3555
[i915#3558]: https://gitlab.freedesktop.org/drm/intel/issues/3558
[i915#3637]: https://gitlab.freedesktop.org/drm/intel/issues/3637
[i915#3638]: https://gitlab.freedesktop.org/drm/intel/issues/3638
[i915#3689]: https://gitlab.freedesktop.org/drm/intel/issues/3689
[i915#3708]: https://gitlab.freedesktop.org/drm/intel/issues/3708
[i915#3734]: https://gitlab.freedesktop.org/drm/intel/issues/3734
[i915#3736]: https://gitlab.freedesktop.org/drm/intel/issues/3736
[i915#3742]: https://gitlab.freedesktop.org/drm/intel/issues/3742
[i915#3828]: https://gitlab.freedesktop.org/drm/intel/issues/3828
[i915#3886]: https://gitlab.freedesktop.org/drm/intel/issues/3886
[i915#4016]: https://gitlab.freedesktop.org/drm/intel/issues/4016
[i915#404]: https://gitlab.freedesktop.org/drm/intel/issues/404
[i915#4070]: https://gitlab.freedesktop.org/drm/intel/issues/4070
[i915#4077]: https://gitlab.freedesktop.org/drm/intel/issues/4077
[i915#4078]: https://gitlab.freedesktop.org/drm/intel/issues/4078
[i915#4079]: https://gitlab.freedesktop.org/drm/intel/issues/4079
[i915#4083]: https://gitlab.freedesktop.org/drm/intel/issues/4083
[i915#4098]: https://gitlab.freedesktop.org/drm/intel/issues/4098
[i915#4103]: https://gitlab.freedesktop.org/drm/intel/issues/4103
[i915#4212]: https://gitlab.freedesktop.org/drm/intel/issues/4212
[i915#4215]: https://gitlab.freedesktop.org/drm/intel/issues/4215
[i915#4258]: https://gitlab.freedesktop.org/drm/intel/issues/4258
[i915#4270]: https://gitlab.freedesktop.org/drm/intel/issues/4270
[i915#4281]: https://gitlab.freedesktop.org/drm/intel/issues/4281
[i915#4349]: https://gitlab.freedesktop.org/drm/intel/issues/4349
[i915#4369]: https://gitlab.freedesktop.org/drm/intel/issues/4369
[i915#4525]: https://gitlab.freedesktop.org/drm/intel/issues/4525
[i915#4538]: https://gitlab.freedesktop.org/drm/intel/issues/4538
[i915#454]: https://gitlab.freedesktop.org/drm/intel/issues/454
[i915#4565]: https://gitlab.freedesktop.org/drm/intel/issues/4565
[i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
[i915#4765]: https://gitlab.freedesktop.org/drm/intel/issues/4765
[i915#4812]: https://gitlab.freedesktop.org/drm/intel/issues/4812
[i915#4833]: https://gitlab.freedesktop.org/drm/intel/issues/4833
[i915#4852]: https://gitlab.freedesktop.org/drm/intel/issues/4852
[i915#4853]: https://gitlab.freedesktop.org/drm/intel/issues/4853
[i915#4855]: https://gitlab.freedesktop.org/drm/intel/issues/4855
[i915#4860]: https://gitlab.freedesktop.org/drm/intel/issues/4860
[i915#4880]: https://gitlab.freedesktop.org/drm/intel/issues/4880
[i915#4881]: https://gitlab.freedesktop.org/drm/intel/issues/4881
[i915#4883]: https://gitlab.freedesktop.org/drm/intel/issues/4883
[i915#4893]: https://gitlab.freedesktop.org/drm/intel/issues/4893
[i915#4941]: https://gitlab.freedesktop.org/drm/intel/issues/4941
[i915#4958]: https://gitlab.freedesktop.org/drm/intel/issues/4958
[i915#4991]: https://gitlab.freedesktop.org/drm/intel/issues/4991
[i915#5115]: https://gitlab.freedesktop.org/drm/intel/issues/5115
[i915#5176]: https://gitlab.freedesktop.org/drm/intel/issues/5176
[i915#5235]: https://gitlab.freedesktop.org/drm/intel/issues/5235
[i915#5286]: https://gitlab.freedesktop.org/drm/intel/issues/5286
[i915#5287]: https://gitlab.freedesktop.org/drm/intel/issues/5287
[i915#5288]: https://gitlab.freedesktop.org/drm/intel/issues/5288
[i915#5289]: https://gitlab.freedesktop.org/drm/intel/issues/5289
[i915#5304]: https://gitlab.freedesktop.org/drm/intel/issues/5304
[i915#5325]: https://gitlab.freedesktop.org/drm/intel/issues/5325
[i915#5327]: https://gitlab.freedesktop.org/drm/intel/issues/5327
[i915#533]: https://gitlab.freedesktop.org/drm/intel/issues/533
[i915#5439]: https://gitlab.freedesktop.org/drm/intel/issues/5439
[i915#5519]: https://gitlab.freedesktop.org/drm/intel/issues/5519
[i915#5563]: https://gitlab.freedesktop.org/drm/intel/issues/5563
[i915#5591]: https://gitlab.freedesktop.org/drm/intel/issues/5591
[i915#5639]: https://gitlab.freedesktop.org/drm/intel/issues/5639
[i915#5723]: https://gitlab.freedesktop.org/drm/intel/issues/5723
[i915#5784]: https://gitlab.freedesktop.org/drm/intel/issues/5784
[i915#5982]: https://gitlab.freedesktop.org/drm/intel/issues/5982
[i915#6095]: https://gitlab.freedesktop.org/drm/intel/issues/6095
[i915#6117]: https://gitlab.freedesktop.org/drm/intel/issues/6117
[i915#6227]: https://gitlab.freedesktop.org/drm/intel/issues/6227
[i915#6230]: https://gitlab.freedesktop.org/drm/intel/issues/6230
[i915#6248]: https://gitlab.freedesktop.org/drm/intel/issues/6248
[i915#6258]: https://gitlab.freedesktop.org/drm/intel/issues/6258
[i915#6301]: https://gitlab.freedesktop.org/drm/intel/issues/6301
[i915#6334]: https://gitlab.freedesktop.org/drm/intel/issues/6334
[i915#6335]: https://gitlab.freedesktop.org/drm/intel/issues/6335
[i915#6403]: https://gitlab.freedesktop.org/drm/intel/issues/6403
[i915#6433]: https://gitlab.freedesktop.org/drm/intel/issues/6433
[i915#6497]: https://gitlab.freedesktop.org/drm/intel/issues/6497
[i915#6524]: https://gitlab.freedesktop.org/drm/intel/issues/6524
[i915#6527]: https://gitlab.freedesktop.org/drm/intel/issues/6527
[i915#658]: https://gitlab.freedesktop.org/drm/intel/issues/658
[i915#768]: https://gitlab.freedesktop.org/drm/intel/issues/768
Build changes
-------------
* CI: CI-20190529 -> None
* IGT: IGT_6619 -> IGTPW_7624
* Piglit: piglit_4509 -> None
CI-20190529: 20190529
CI_DRM_11976: 33740045ce83ed20c52a6f213faadb0443bc40f3 @ git://anongit.freedesktop.org/gfx-ci/linux
IGTPW_7624: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/index.html
IGT_6619: ec2ab8e3a151ce05bd2726319c528c2ab99e8a96 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7624/index.html
[-- Attachment #2: Type: text/html, Size: 57770 bytes --]
^ permalink raw reply [flat|nested] 7+ messages in thread
* ✗ Fi.CI.BUILD: failure for Switch the FFT library from GSL to meow_fft (rev2)
2022-08-09 12:17 [igt-dev] [PATCH i-g-t 0/3] Switch the FFT library from GSL to meow_fft Ryszard Knop
` (4 preceding siblings ...)
2022-08-09 17:01 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
@ 2024-08-22 19:46 ` Patchwork
5 siblings, 0 replies; 7+ messages in thread
From: Patchwork @ 2024-08-22 19:46 UTC (permalink / raw)
To: Ryszard Knop; +Cc: igt-dev
== Series Details ==
Series: Switch the FFT library from GSL to meow_fft (rev2)
URL : https://patchwork.freedesktop.org/series/107093/
State : failure
== Summary ==
Applying: lib/uwildmat: Move to a dedicated vendored library directory
Using index info to reconstruct a base tree...
M lib/meson.build
Falling back to patching base and 3-way merge...
Auto-merging lib/meson.build
CONFLICT (content): Merge conflict in lib/meson.build
Patch failed at 0001 lib/uwildmat: Move to a dedicated vendored library directory
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2024-08-22 19:46 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-08-09 12:17 [igt-dev] [PATCH i-g-t 0/3] Switch the FFT library from GSL to meow_fft Ryszard Knop
2022-08-09 12:17 ` [igt-dev] [PATCH i-g-t 1/3] lib/uwildmat: Move to a dedicated vendored library directory Ryszard Knop
2022-08-09 12:18 ` [igt-dev] [PATCH i-g-t 2/3] lib/vendor: Add the meow_fft library Ryszard Knop
2022-08-09 12:18 ` [igt-dev] [PATCH i-g-t 3/3] lib/igt_audio: Replace GSL FFT usage with meow_fft Ryszard Knop
2022-08-09 13:17 ` [igt-dev] ✓ Fi.CI.BAT: success for Switch the FFT library from GSL to meow_fft Patchwork
2022-08-09 17:01 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
2024-08-22 19:46 ` ✗ Fi.CI.BUILD: failure for Switch the FFT library from GSL to meow_fft (rev2) Patchwork
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox