teflon: Support more Pad configurations

Add support for padding along the channels dimension.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/34627>
This commit is contained in:
Tomeu Vizoso
2024-12-11 18:19:23 +01:00
committed by Marge Bot
parent c31ce2d71f
commit 4a951a73e7
2 changed files with 34 additions and 9 deletions
+23 -9
View File
@@ -169,6 +169,8 @@ fill_operation(struct teflon_delegate *delegate, TfLiteContext *tf_context, TfLi
operation->pad.after_x = paddings[3];
operation->pad.before_y = paddings[4];
operation->pad.after_y = paddings[5];
operation->pad.before_z = paddings[6];
operation->pad.after_z = paddings[7];
break;
}
case kTfLiteBuiltinFullyConnected: {
@@ -698,15 +700,27 @@ PrepareDelegate(TfLiteContext *context, TfLiteDelegate *delegate)
break;
}
case kTfLiteBuiltinPad: {
uint32_t *padding = context->tensors[node->inputs->data[1]].data.data;
supported = padding[0] == 0 &&
padding[1] == 0 &&
padding[2] == 1 &&
padding[3] == 1 &&
padding[4] == 1 &&
padding[5] == 1 &&
padding[6] == 0 &&
padding[7] == 0;
// Values tensor for non-zero padding not yet implemented
if (node->inputs->size == 2) {
TfLiteTensor *padding_tensor = &context->tensors[node->inputs->data[1]];
if (padding_tensor->type == kTfLiteInt32) {
int32_t *paddings = padding_tensor->data.data;
if (padding_tensor->dims->size == 2 &&
padding_tensor->dims->data[0] == 4 &&
padding_tensor->dims->data[1] == 2) {
if (paddings[0] == 0 &&
paddings[1] == 0 &&
paddings[2] >= 0 && paddings[2] <= 2 &&
paddings[3] >= 0 && paddings[3] <= 2 &&
paddings[4] >= 0 && paddings[4] <= 2 &&
paddings[5] >= 0 && paddings[5] <= 2 &&
paddings[6] >= 0 && paddings[6] <= 2 &&
paddings[7] >= 0 && paddings[7] <= 2) {
supported = true;
}
}
}
}
break;
}
case kTfLiteBuiltinFullyConnected: {
+11
View File
@@ -1178,10 +1178,21 @@ struct pipe_ml_operation
* Top padding.
*/
unsigned before_y;
/**
* Bottom padding.
*/
unsigned after_y;
/**
* Channel before padding.
*/
unsigned before_z;
/**
* Channel after padding.
*/
unsigned after_z;
} pad;
struct {