From dfee9a75ea756b897a8495c31d6101ae7c71667d Mon Sep 17 00:00:00 2001 From: nihui Date: Mon, 29 Jun 2020 00:24:19 +0800 Subject: [PATCH] workaround the shape specialization constant not respected properly in padding reflect mode on nvidia gpu --- src/layer/vulkan/shader/padding.comp | 11 ++++++++--- src/layer/vulkan/shader/padding_pack4.comp | 8 ++++++-- src/layer/vulkan/shader/padding_pack8.comp | 8 ++++++-- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/layer/vulkan/shader/padding.comp b/src/layer/vulkan/shader/padding.comp index 6b8b05199..e9dbdf26b 100644 --- a/src/layer/vulkan/shader/padding.comp +++ b/src/layer/vulkan/shader/padding.comp @@ -134,9 +134,14 @@ void main() x = abs(x); y = abs(y); z = abs(z); - x = (psc(w) - 1) - abs(x - (psc(w) - 1)); - y = (psc(h) - 1) - abs(y - (psc(h) - 1)); - z = (psc(c) - 1) - abs(z - (psc(c) - 1)); + // NOTE psc(X) get zeros on nvidia + // TODO only enable this workaround for some nvidia driver + x = (p.w - 1) - abs(x - (p.w - 1)); + y = (p.h - 1) - abs(y - (p.h - 1)); + z = (p.c - 1) - abs(z - (p.c - 1)); +// x = (psc(w) - 1) - abs(x - (psc(w) - 1)); +// y = (psc(h) - 1) - abs(y - (psc(h) - 1)); +// z = (psc(c) - 1) - abs(z - (psc(c) - 1)); #if NCNN_image_shader image3d_cp1(top_blob, ivec3(gx, gy, gz), bottom_blob, ivec3(x, y, z)); diff --git a/src/layer/vulkan/shader/padding_pack4.comp b/src/layer/vulkan/shader/padding_pack4.comp index fcdeb6530..2d20b6105 100644 --- a/src/layer/vulkan/shader/padding_pack4.comp +++ b/src/layer/vulkan/shader/padding_pack4.comp @@ -131,8 +131,12 @@ void main() { x = abs(x); y = abs(y); - x = (psc(w) - 1) - abs(x - (psc(w) - 1)); - y = (psc(h) - 1) - abs(y - (psc(h) - 1)); + // NOTE psc(X) get zeros on nvidia + // TODO only enable this workaround for some nvidia driver + x = (p.w - 1) - abs(x - (p.w - 1)); + y = (p.h - 1) - abs(y - (p.h - 1)); +// x = (psc(w) - 1) - abs(x - (psc(w) - 1)); +// y = (psc(h) - 1) - abs(y - (psc(h) - 1)); #if NCNN_image_shader image3d_cp4(top_blob, ivec3(gx, gy, gz), bottom_blob, ivec3(x, y, gz)); diff --git a/src/layer/vulkan/shader/padding_pack8.comp b/src/layer/vulkan/shader/padding_pack8.comp index 4002e4650..31890371e 100644 --- a/src/layer/vulkan/shader/padding_pack8.comp +++ b/src/layer/vulkan/shader/padding_pack8.comp @@ -133,8 +133,12 @@ void main() { x = abs(x); y = abs(y); - x = (psc(w) - 1) - abs(x - (psc(w) - 1)); - y = (psc(h) - 1) - abs(y - (psc(h) - 1)); + // NOTE psc(X) get zeros on nvidia + // TODO only enable this workaround for some nvidia driver + x = (p.w - 1) - abs(x - (p.w - 1)); + y = (p.h - 1) - abs(y - (p.h - 1)); +// x = (psc(w) - 1) - abs(x - (psc(w) - 1)); +// y = (psc(h) - 1) - abs(y - (psc(h) - 1)); #if NCNN_image_shader image3d_cp8(top_blob, ivec3(gx, gy, gz), bottom_blob, ivec3(x, y, gz));