Commit 04a10256 authored by Andrey Filippov's avatar Andrey Filippov

CLAUDE: GpuQuadJna setLpfRbg/setLpfCorr overrides -> tp_proc_set_const (fix first JNA NPE)

setLpfRbg flattens the 4x64 r/b/g/m arrays -> "lpf_data"; setLpfCorr -> const_name
(lpf_corr / lpf_rb_corr). Uploads to the native module's constant memory, matching JCUDA. mvn clean.
Co-Authored-By: 's avatarClaude Opus 4.8 (1M context) <noreply@anthropic.com>
parent 41db46f1
...@@ -253,4 +253,16 @@ public class GpuQuadJna extends GpuQuad { ...@@ -253,4 +253,16 @@ public class GpuQuadJna extends GpuQuad {
@Override public int[] handleWH(int[] wh, boolean ref_scene) { @Override public int[] handleWH(int[] wh, boolean ref_scene) {
return (wh != null) ? wh : new int[]{img_width, img_height}; return (wh != null) ? wh : new int[]{img_width, img_height};
} }
// ---- LPF filter coefficients -> native __constant__ memory (same as GpuQuad's cuModuleGetGlobal path) ----
@Override public void setLpfRbg(float[][] lpf_rbg, boolean debug) {
int l = lpf_rbg[0].length;
float[] lpf_flat = new float[lpf_rbg.length * l];
for (int i = 0; i < lpf_rbg.length; i++)
for (int j = 0; j < l; j++) lpf_flat[j + i * l] = lpf_rbg[i][j];
lib.tp_proc_set_const(proc, "lpf_data", lpf_flat, lpf_flat.length);
}
@Override public void setLpfCorr(String const_name, float[] lpf_flat, boolean debug) {
lib.tp_proc_set_const(proc, const_name, lpf_flat, lpf_flat.length);
}
} }
...@@ -95,6 +95,8 @@ public interface TpJna extends Library { ...@@ -95,6 +95,8 @@ public interface TpJna extends Library {
int tp_proc_get_corr2d(Pointer proc, float[] out, int corrRad); int tp_proc_get_corr2d(Pointer proc, float[] out, int corrRad);
int tp_proc_num_corr_tiles(Pointer proc); int tp_proc_num_corr_tiles(Pointer proc);
int tp_proc_num_corr_combo(Pointer proc); int tp_proc_num_corr_combo(Pointer proc);
/** Upload to a named __constant__ symbol (lpf_data / lpf_corr / lpf_rb_corr). 0 on success. */
int tp_proc_set_const(Pointer proc, String name, float[] data, int n);
void tp_proc_destroy(Pointer proc); void tp_proc_destroy(Pointer proc);
/** Validate the persistent path: convert CLT (outCltErr), imclt RBG (outRbgErr), quad corr /** Validate the persistent path: convert CLT (outCltErr), imclt RBG (outRbgErr), quad corr
* order-independent (outCorrErr), + no_kernels smoke (outNokernMax). */ * order-independent (outCorrErr), + no_kernels smoke (outNokernMax). */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment