// File: conv2d.h
#pragma once

// Per-definition constants for this conv2d specialisation.
namespace conv2d_def {
constexpr int Kh       = 3;
constexpr int Kw       = 3;
constexpr int Sh       = 2;
constexpr int Sw       = 2;
constexpr int Dh       = 1;
constexpr int Dw       = 1;
constexpr int pad_top  = 1;
constexpr int pad_left = 1;
} // namespace conv2d_def

#ifdef __cplusplus
extern "C" {
#endif
// LLM target: implement this in kernel.cpp.
// N, C_in, H, W, C_out are var dims; H_out/W_out are pre-computed by the binding harness.
// Input layout: (N, C_in, H, W); weight layout: (C_out, C_in, Kh, Kw); output layout: (N, C_out, H_out, W_out).
void inner_conv2d(
    const float* input, float* output,
    const float* weight, const float* bias,
    int N, int C_in, int H, int W, int C_out, int H_out, int W_out);
#ifdef __cplusplus
}
#endif