Skip to content

Commit 2aad6d8

Browse files
committed
kernel: Bump to 3.18.9
kernel: Align pcm512x driver with upstream See: raspberrypi/linux#873 kernel: dts: overlay: add mz61581, fix piscreen and rpi-display See: raspberrypi/linux#874 kernel: bcm2709: Increase the spare/free IRQs to match bcm2708 See: raspberrypi/linux#871 kernel: add support for Adafruit PiTFT See: raspberrypi/linux#858 firmware: dispserve: Allow vsync requests from multiple clients See: raspberrypi/userland#218 firmware: hello_fft: Update to version 3 See: http://www.aholme.co.uk/GPU_FFT/Main.htm
1 parent cdcb506 commit 2aad6d8

File tree

5,635 files changed

+151174
-143215
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

5,635 files changed

+151174
-143215
lines changed

boot/fixup.dat

2 Bytes
Binary file not shown.

boot/fixup_x.dat

2 Bytes
Binary file not shown.

boot/kernel.img

8.84 KB
Binary file not shown.

boot/kernel7.img

9.89 KB
Binary file not shown.

boot/overlays/mz61581-overlay.dtb

2.61 KB
Binary file not shown.

boot/overlays/piscreen-overlay.dtb

0 Bytes
Binary file not shown.
2.6 KB
Binary file not shown.

boot/overlays/rpi-display-overlay.dtb

38 Bytes
Binary file not shown.

boot/start.elf

192 Bytes
Binary file not shown.

boot/start_cd.elf

0 Bytes
Binary file not shown.

boot/start_x.elf

192 Bytes
Binary file not shown.

extra/Module.symvers

Lines changed: 5967 additions & 5957 deletions
Large diffs are not rendered by default.

extra/Module7.symvers

Lines changed: 6076 additions & 6066 deletions
Large diffs are not rendered by default.

extra/System.map

Lines changed: 51798 additions & 51643 deletions
Large diffs are not rendered by default.

extra/System7.map

Lines changed: 52612 additions & 52458 deletions
Large diffs are not rendered by default.

extra/git_hash

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
91a03559bbc1b5cb2b1157150c1c698b22716d9a
1+
780e68130fba82a525b89e85f051c91b7a508e52

extra/uname_string

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
Linux version 3.18.8+ (dc4@dc4-XPS13-9333) (gcc version 4.8.3 20140303 (prerelease) (crosstool-NG linaro-1.13.1+bzr2650 - Linaro GCC 2014.03) ) #765 PREEMPT Thu Mar 5 15:41:59 GMT 2015
1+
Linux version 3.18.9+ (dc4@dc4-XPS13-9333) (gcc version 4.8.3 20140303 (prerelease) (crosstool-NG linaro-1.13.1+bzr2650 - Linaro GCC 2014.03) ) #767 PREEMPT Sat Mar 7 21:41:13 GMT 2015

extra/uname_string7

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
Linux version 3.18.8-v7+ (dc4@dc4-XPS13-9333) (gcc version 4.8.3 20140303 (prerelease) (crosstool-NG linaro-1.13.1+bzr2650 - Linaro GCC 2014.03) ) #765 SMP PREEMPT Thu Mar 5 15:47:06 GMT 2015
1+
Linux version 3.18.9-v7+ (dc4@dc4-XPS13-9333) (gcc version 4.8.3 20140303 (prerelease) (crosstool-NG linaro-1.13.1+bzr2650 - Linaro GCC 2014.03) ) #767 SMP PREEMPT Sat Mar 7 21:52:35 GMT 2015

hardfp/opt/vc/include/interface/mmal/mmal_encodings.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3939
/** \name Pre-defined video encodings */
4040
/* @{ */
4141
#define MMAL_ENCODING_H264 MMAL_FOURCC('H','2','6','4')
42+
#define MMAL_ENCODING_MVC MMAL_FOURCC('M','V','C',' ')
4243
#define MMAL_ENCODING_H263 MMAL_FOURCC('H','2','6','3')
4344
#define MMAL_ENCODING_MP4V MMAL_FOURCC('M','P','4','V')
4445
#define MMAL_ENCODING_MP2V MMAL_FOURCC('M','P','2','V')

hardfp/opt/vc/lib/libEGL_static.a

0 Bytes
Binary file not shown.

hardfp/opt/vc/lib/libGLESv2_static.a

0 Bytes
Binary file not shown.
0 Bytes
Binary file not shown.

hardfp/opt/vc/lib/libkhrn_client.a

0 Bytes
Binary file not shown.

hardfp/opt/vc/lib/libkhrn_static.a

0 Bytes
Binary file not shown.

hardfp/opt/vc/lib/libmmal_util.so

0 Bytes
Binary file not shown.

hardfp/opt/vc/lib/libvcfiled_check.a

0 Bytes
Binary file not shown.

hardfp/opt/vc/lib/libvchostif.a

0 Bytes
Binary file not shown.

hardfp/opt/vc/lib/libvcilcs.a

0 Bytes
Binary file not shown.
0 Bytes
Binary file not shown.

hardfp/opt/vc/src/hello_pi/hello_fft/gpu_fft.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
2-
BCM2835 "GPU_FFT" release 2.0
3-
Copyright (c) 2014, Andrew Holme.
2+
BCM2835 "GPU_FFT" release 3.0
3+
Copyright (c) 2015, Andrew Holme.
44
All rights reserved.
55
66
Redistribution and use in source and binary forms, with or without
@@ -36,7 +36,7 @@ typedef struct GPU_FFT_COMPLEX COMPLEX;
3636

3737
int gpu_fft_prepare(
3838
int mb, // mailbox file_desc
39-
int log2_N, // log2(FFT_length) = 8...20
39+
int log2_N, // log2(FFT_length) = 8...22
4040
int direction, // GPU_FFT_FWD: fft(); GPU_FFT_REV: ifft()
4141
int jobs, // number of transforms in batch
4242
struct GPU_FFT **fft) {

hardfp/opt/vc/src/hello_pi/hello_fft/gpu_fft.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
2-
BCM2835 "GPU_FFT" release 2.0
3-
Copyright (c) 2014, Andrew Holme.
2+
BCM2835 "GPU_FFT" release 3.0
3+
Copyright (c) 2015, Andrew Holme.
44
All rights reserved.
55
66
Redistribution and use in source and binary forms, with or without
@@ -51,7 +51,7 @@ struct GPU_FFT_PTR {
5151

5252
struct GPU_FFT_BASE {
5353
int mb;
54-
unsigned handle, size, vc_msg, vc_code, vc_unifs[GPU_FFT_QPUS];
54+
unsigned handle, size, vc_msg, vc_code, vc_unifs[GPU_FFT_QPUS], peri_size;
5555
volatile unsigned *peri;
5656
};
5757

@@ -63,7 +63,7 @@ struct GPU_FFT {
6363

6464
int gpu_fft_prepare(
6565
int mb, // mailbox file_desc
66-
int log2_N, // log2(FFT_length) = 8...20
66+
int log2_N, // log2(FFT_length) = 8...22
6767
int direction, // GPU_FFT_FWD: fft(); GPU_FFT_REV: ifft()
6868
int jobs, // number of transforms in batch
6969
struct GPU_FFT **fft);

hardfp/opt/vc/src/hello_pi/hello_fft/gpu_fft.txt

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
BCM2835 "GPU_FFT" release 2.0 by Andrew Holme, 2014.
1+
BCM2835 "GPU_FFT" release 3.0 by Andrew Holme, 2015.
22

33
GPU_FFT is an FFT library for the Raspberry Pi which exploits the BCM2835 SoC
44
3D hardware to deliver ten times more data throughput than is possible on the
5-
700 MHz ARM. Kernels are provided for all power-of-2 FFT lengths between 256
6-
and 2,097,152 points inclusive. A transpose function, which also uses the 3D
7-
hardware, is provided to support 2-dimensional transforms.
5+
700 MHz ARM of the Pi 1. Kernels are provided for all power-of-2 FFT lengths
6+
between 256 and 4,194,304 points inclusive. A transpose function, which also
7+
uses the 3D hardware, is provided to support 2-dimensional transforms.
88

99

1010
*** Accuracy ***
@@ -13,32 +13,36 @@ GPU_FFT uses single-precision floats for data and twiddle factors. The output
1313
is not scaled. The relative root-mean-square (rms) error in parts-per-million
1414
(ppm) for different transform lengths (N) is typically:
1515

16-
log2(N) | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17
17-
ppm rms | 0.27 | 0.42 | 0.50 | 0.70 | 2.3 | 4.4 | 7.6 | 9.2 | 18 | 70
16+
log2(N) | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15
17+
ppm rms | 0.33 | 0.46 | 0.52 | 0.59 | 0.78 | 0.83 | 0.92 | 0.98
1818

19-
log2(N) | 18 | 19 | 20 | 21 | 8...17 batch of 10
20-
ppm rms | 100 | 180 | 360 | 720 | 18...21 batch of 1
19+
log2(N) | 16 | 17 | 18 | 19 | 20 | 21 | 22
20+
ppm rms | 1.0 | 1.3 | 1.3 | 1.4 | 1.5 | 1.5 | 1.5
21+
22+
Accuracy has improved significantly over previous releases at the expense of a
23+
small (2%) performance hit; however, FFTW is still one order of magnitude more
24+
accurate than GPU_FFT.
2125

2226

2327
*** Throughput ***
2428

2529
GPU_FFT 1.0 had to be invoked through a "mailbox" which added a 100us overhead
2630
on every call. To mitigate this, batches of transforms could be submitted via
27-
a single call. GPU_FFT 2.0 avoids this 100us overhead by poking GPU registers
31+
a single call. GPU_FFT now avoids this 100us overhead by poking GPU registers
2832
directly from the ARM if total batch runtime will be short; but still uses the
2933
mailbox for longer jobs to avoid busy waiting at 100% CPU for too long.
3034

3135
Typical per-transform runtimes for batch sizes of 1 and 10; and comparative
32-
figures for FFTW (FFTW_MEASURE mode) are:
36+
figures for FFTW (FFTW_MEASURE mode) on a Pi 1 with L2 cache enabled are:
3337

34-
log2(N) | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
35-
1 | 0.036 | 0.051 | 0.070 | 0.11 | 0.24 | 0.58 | 1.2 | 3.3 |
36-
10 | 0.016 | 0.027 | 0.045 | 0.095 | 0.25 | 0.61 | 1.2 | 3.2 |
37-
FFTW | 0.092 | 0.22 | 0.48 | 0.95 | 3.0 | 5.1 | 12 | 31 |
38+
log2(N) | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15
39+
1 | 0.033 | 0.049 | 0.070 | 0.12 | 0.25 | 0.61 | 1.2 | 3.5
40+
10 | 0.017 | 0.029 | 0.049 | 0.11 | 0.27 | 0.66 | 1.2 | 3.3
41+
FFTW | 0.092 | 0.22 | 0.48 | 0.95 | 3.0 | 5.1 | 12 | 31
3842

39-
log2(N) | 16 | 17 | 18 | 19 | 20 | 21 | All times in
40-
1 | 6.8 | 16 | 42 | 95 | 190 | 380 | milliseconds
41-
FFTW | 83 | 180 | 560 | 670 | 1600 | 3400 | 2 sig. figs.
43+
log2(N) | 16 | 17 | 18 | 19 | 20 | 21 | 22 All times in
44+
1 | 7.0 | 17 | 43 | 97 | 194 | 388 | 786 milliseconds
45+
FFTW | 83 | 180 | 560 | 670 | 1600 | 3400 | 8800 2 sig. figs.
4246

4347

4448
*** API functions ***
@@ -57,7 +61,7 @@ log2(N) | 16 | 17 | 18 | 19 | 20 | 21 | All times in
5761

5862
int mb Mailbox file descriptor obtained by calling mbox_open()
5963

60-
int log2_N log2(FFT length) = 8 to 21
64+
int log2_N log2(FFT length) = 8 to 22
6165

6266
int direction FFT direction: GPU_FFT_FWD for forward FFT
6367
GPU_FFT_REV for inverse FFT
@@ -105,7 +109,6 @@ as a demo with the latest Raspbian distro. Build and run it as follows:
105109

106110
cd /opt/vc/src/hello_pi/hello_fft
107111
make
108-
sudo mknod char_dev c 100 0
109112
sudo ./hello_fft.bin 12
110113

111114
It accepts three optional command-line arguments: <log2_N> <batch> <loops>
@@ -114,13 +117,12 @@ The special character device is required for the ioctl mailbox through which
114117
the ARM communicates with the Videocore GPU.
115118

116119

117-
*** With Open GL ***
120+
*** With Open GL on Pi 1 ***
118121

119-
GPU_FFT and Open GL will run concurrently if the GPU_FFT_MEM_* defines in
120-
file gpu_fft.c are changed as follows:
122+
GPU_FFT and Open GL will run concurrently on Pi 1 if GPU_FFT is configured not
123+
to use VC4 L2 cache by zeroing a define in file gpu_fft_base.c as follows:
121124

122-
#define GPU_FFT_MEM_FLG 0x4 // cached=0xC; direct=0x4
123-
#define GPU_FFT_MEM_MAP 0x20000000 // cached=0x0; direct=0x20000000
125+
#define GPU_FFT_USE_VC4_L2_CACHE 0 // Pi 1 only: cached=1; direct=0
124126

125127
Overall performance will probably be higher if GPU_FFT and Open GL take turns
126128
at using the 3D hardware. Since eglSwapBuffers() returns immediately without

hardfp/opt/vc/src/hello_pi/hello_fft/gpu_fft_base.c

Lines changed: 55 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
2-
BCM2835 "GPU_FFT" release 2.0
3-
Copyright (c) 2014, Andrew Holme.
2+
BCM2835 "GPU_FFT" release 3.0
3+
Copyright (c) 2015, Andrew Holme.
44
All rights reserved.
55
66
Redistribution and use in source and binary forms, with or without
@@ -26,7 +26,8 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2626
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2727
*/
2828

29-
#include "bcm_host.h"
29+
#include <dlfcn.h>
30+
3031
#include "gpu_fft.h"
3132
#include "mailbox.h"
3233

@@ -42,11 +43,48 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4243
#define V3D_DBQITE (0xC00e2c>>2)
4344
#define V3D_DBQITC (0xC00e30>>2)
4445

45-
#define GPU_FFT_MEM_MAP 0x0 // cached=0x0; direct=0x20000000
46+
// Setting this define to zero on Pi 1 allows GPU_FFT and Open GL
47+
// to co-exist and also improves performance of longer transforms:
48+
#define GPU_FFT_USE_VC4_L2_CACHE 1 // Pi 1 only: cached=1; direct=0
4649

4750
#define GPU_FFT_NO_FLUSH 1
4851
#define GPU_FFT_TIMEOUT 2000 // ms
4952

53+
struct GPU_FFT_HOST {
54+
unsigned mem_flg, mem_map, peri_addr, peri_size;
55+
};
56+
57+
int gpu_fft_get_host_info(struct GPU_FFT_HOST *info) {
58+
void *handle;
59+
unsigned (*bcm_host_get_sdram_address) (void);
60+
unsigned (*bcm_host_get_peripheral_address)(void);
61+
unsigned (*bcm_host_get_peripheral_size) (void);
62+
63+
// Pi 1 defaults
64+
info->peri_addr = 0x20000000;
65+
info->peri_size = 0x01000000;
66+
info->mem_flg = GPU_FFT_USE_VC4_L2_CACHE? 0xC : 0x4;
67+
info->mem_map = GPU_FFT_USE_VC4_L2_CACHE? 0x0 : 0x20000000; // Pi 1 only
68+
69+
handle = dlopen("libbcm_host.so", RTLD_LAZY);
70+
if (!handle) return -1;
71+
72+
*(void **) (&bcm_host_get_sdram_address) = dlsym(handle, "bcm_host_get_sdram_address");
73+
*(void **) (&bcm_host_get_peripheral_address) = dlsym(handle, "bcm_host_get_peripheral_address");
74+
*(void **) (&bcm_host_get_peripheral_size) = dlsym(handle, "bcm_host_get_peripheral_size");
75+
76+
if (bcm_host_get_sdram_address && bcm_host_get_sdram_address()!=0x40000000) { // Pi 2?
77+
info->mem_flg = 0x4; // ARM cannot see VC4 L2 on Pi 2
78+
info->mem_map = 0x0;
79+
}
80+
81+
if (bcm_host_get_peripheral_address) info->peri_addr = bcm_host_get_peripheral_address();
82+
if (bcm_host_get_peripheral_size) info->peri_size = bcm_host_get_peripheral_size();
83+
84+
dlclose(handle);
85+
return 0;
86+
}
87+
5088
unsigned gpu_fft_base_exec_direct (
5189
struct GPU_FFT_BASE *base,
5290
int num_qpus) {
@@ -95,43 +133,46 @@ int gpu_fft_alloc (
95133
unsigned size,
96134
struct GPU_FFT_PTR *ptr) {
97135

136+
struct GPU_FFT_HOST host;
98137
struct GPU_FFT_BASE *base;
99138
volatile unsigned *peri;
100139
unsigned handle;
101140

141+
if (gpu_fft_get_host_info(&host)) return -5;
142+
102143
if (qpu_enable(mb, 1)) return -1;
103144

104-
// Shared memory : cached=0xC; direct=0x4
105-
unsigned mem_flg = bcm_host_get_sdram_address() == 0x40000000 ? 0xC : 0x4;
106-
handle = mem_alloc(mb, size, 4096, mem_flg);
145+
// Shared memory
146+
handle = mem_alloc(mb, size, 4096, host.mem_flg);
107147
if (!handle) {
108148
qpu_enable(mb, 0);
109149
return -3;
110150
}
111151

112-
peri = (volatile unsigned *) mapmem(bcm_host_get_peripheral_address(), bcm_host_get_peripheral_size());
152+
peri = (volatile unsigned *) mapmem(host.peri_addr, host.peri_size);
113153
if (!peri) {
114154
mem_free(mb, handle);
115155
qpu_enable(mb, 0);
116156
return -4;
117157
}
118158

119159
ptr->vc = mem_lock(mb, handle);
120-
ptr->arm.vptr = mapmem(BUS_TO_PHYS(ptr->vc+GPU_FFT_MEM_MAP), size);
160+
ptr->arm.vptr = mapmem(BUS_TO_PHYS(ptr->vc+host.mem_map), size);
121161

122162
base = (struct GPU_FFT_BASE *) ptr->arm.vptr;
123-
base->peri = peri;
124-
base->mb = mb;
125-
base->handle = handle;
126-
base->size = size;
163+
base->peri = peri;
164+
base->peri_size = host.peri_size;
165+
base->mb = mb;
166+
base->handle = handle;
167+
base->size = size;
127168

128169
return 0;
129170
}
130171

131172
void gpu_fft_base_release(struct GPU_FFT_BASE *base) {
132173
int mb = base->mb;
133174
unsigned handle = base->handle, size = base->size;
134-
unmapmem((void*)base->peri, bcm_host_get_peripheral_size());
175+
unmapmem((void*)base->peri, base->peri_size);
135176
unmapmem((void*)base, size);
136177
mem_unlock(mb, handle);
137178
mem_free(mb, handle);

hardfp/opt/vc/src/hello_pi/hello_fft/gpu_fft_shaders.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
2-
BCM2835 "GPU_FFT" release 2.0
3-
Copyright (c) 2014, Andrew Holme.
2+
BCM2835 "GPU_FFT" release 3.0
3+
Copyright (c) 2015, Andrew Holme.
44
All rights reserved.
55
66
Redistribution and use in source and binary forms, with or without
@@ -68,6 +68,9 @@ static unsigned int shader_1024k[] = {
6868
static unsigned int shader_2048k[] = {
6969
#include "hex/shader_2048k.hex"
7070
};
71+
static unsigned int shader_4096k[] = {
72+
#include "hex/shader_4096k.hex"
73+
};
7174

7275
static struct {
7376
unsigned int size, *code;
@@ -86,7 +89,8 @@ shaders[] = {
8689
{sizeof(shader_256k), shader_256k},
8790
{sizeof(shader_512k), shader_512k},
8891
{sizeof(shader_1024k), shader_1024k},
89-
{sizeof(shader_2048k), shader_2048k}
92+
{sizeof(shader_2048k), shader_2048k},
93+
{sizeof(shader_4096k), shader_4096k}
9094
};
9195

9296
unsigned int gpu_fft_shader_size(int log2_N) {

hardfp/opt/vc/src/hello_pi/hello_fft/gpu_fft_twiddles.c

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
2-
BCM2835 "GPU_FFT" release 2.0
3-
Copyright (c) 2014, Andrew Holme.
2+
BCM2835 "GPU_FFT" release 3.0
3+
Copyright (c) 2015, Andrew Holme.
44
All rights reserved.
55
66
Redistribution and use in source and binary forms, with or without
@@ -85,6 +85,15 @@ static float *twiddles_step_32(double two_pi, float *out, double theta) {
8585
return twiddles_step_16(two_pi, out, 2*theta);
8686
}
8787

88+
static float *twiddles_step_64(double two_pi, float *out, double theta) {
89+
int i;
90+
for (i=0; i<32; i++) {
91+
*out++ = ALPHA(theta);
92+
*out++ = BETA(theta);
93+
}
94+
return twiddles_step_32(two_pi, out, 2*theta);
95+
}
96+
8897
/****************************************************************************/
8998

9099
static void twiddles_256(double two_pi, float *out) {
@@ -256,6 +265,19 @@ static void twiddles_2048k(double two_pi, float *out) {
256265
out = twiddles_base_32(two_pi, out, two_pi/N*q);
257266
}
258267

268+
static void twiddles_4096k(double two_pi, float *out) {
269+
double N=4096*1024;
270+
int q;
271+
272+
out = twiddles_base_64(two_pi, out);
273+
out = twiddles_step_64(two_pi, out, two_pi/N * 32*32);
274+
out = twiddles_step_32(two_pi, out, two_pi/N * 32);
275+
out = twiddles_step_32(two_pi, out, two_pi/N * GPU_FFT_QPUS);
276+
277+
for (q=0; q<GPU_FFT_QPUS; q++)
278+
out = twiddles_base_32(two_pi, out, two_pi/N*q);
279+
}
280+
259281
/****************************************************************************/
260282

261283
static struct {
@@ -276,11 +298,12 @@ shaders[] = {
276298
{4, 6, 2, twiddles_256k},
277299
{4, 7, 2, twiddles_512k},
278300
{4, 8, 2, twiddles_1024k},
279-
{4,10, 2, twiddles_2048k}
301+
{4,10, 2, twiddles_2048k},
302+
{4,12, 2, twiddles_4096k}
280303
};
281304

282305
int gpu_fft_twiddle_size(int log2_N, int *shared, int *unique, int *passes) {
283-
if (log2_N<8 || log2_N>21) return -1;
306+
if (log2_N<8 || log2_N>22) return -1;
284307
*shared = shaders[log2_N-8].shared;
285308
*unique = shaders[log2_N-8].unique;
286309
*passes = shaders[log2_N-8].passes;

0 commit comments

Comments
 (0)