// File: conv2d_depthwise_w8a8ch_contract.h
#pragma once
#include "mat.h"
#include "option.h"

// Harness contract for conv2d_depthwise w8a8ch (int8) baseline.
// Called by armbench_entry_conv2d_depthwise (binding.cpp); implemented by kernel.cpp.
// num_output (== C, group == C) is encoded in top_blob.c (pre-allocated by
// binding.cpp, elemsize=1u — int8 output).
//
// Unlike conv2d's scalar input_scale, this op's input_scales is a genuine
// per-channel (shape=[C]) runtime tensor — ConvolutionDepthWise_arm's int8
// path expects bottom_blob_int8_scales sized `group`, not a single scalar
// like plain Convolution_arm — so it's passed as a real Mat, not baked.
namespace ncnn {
int conv2d_depthwise_w8a8ch_kernel(
    const Mat& bottom_blob, Mat& top_blob,
    const Mat& weight_data, const Mat& bias_data,
    const Mat& input_scales, const Mat& weight_scales,
    int kernel_h, int kernel_w,
    int stride_h, int stride_w,
    int dilation_h, int dilation_w,
    int pad,
    const Option& opt);
}