diff options
| -rw-r--r-- | source/slang/slang-syntax.cpp | 11 | ||||
| -rw-r--r-- | tests/bindings/vk-image-format.slang | 6 |
2 files changed, 15 insertions, 2 deletions
diff --git a/source/slang/slang-syntax.cpp b/source/slang/slang-syntax.cpp index 55ed224cb..bb5b574bb 100644 --- a/source/slang/slang-syntax.cpp +++ b/source/slang/slang-syntax.cpp @@ -1185,8 +1185,15 @@ bool findVkImageFormatByName(const UnownedStringSlice& name, ImageFormat* outFor if (name.endsWith(kSNorm)) { StringBuilder buf; - // format names end with snormal after a '_', so replace with that - buf << name.head(name.getLength() - kSNorm.getLength()) << "_" << kSNorm; + auto prefix = name.head(name.getLength() - kSNorm.getLength()); + buf << prefix; + // format names end with snormal after a '_', so add an underscore + // if the prefix doesn't already end with one + if (prefix.getLength() == 0 || prefix[prefix.getLength() - 1] != '_') + { + buf << "_"; + } + buf << kSNorm; return findImageFormatByName(buf.getUnownedSlice(), outFormat); } diff --git a/tests/bindings/vk-image-format.slang b/tests/bindings/vk-image-format.slang index 2f7bb53b5..ff0422d28 100644 --- a/tests/bindings/vk-image-format.slang +++ b/tests/bindings/vk-image-format.slang @@ -5,6 +5,7 @@ //CHECK: layout(r32f) //CHECK: layout(r16_snorm) //CHECK: layout(r11f_g11f_b10f) +//CHECK: layout(rgba16_snorm) // Something typical [vk::image_format("r32f")] @@ -18,6 +19,10 @@ RWTexture2D<float> snormTexture; [vk::image_format("r11g11b10f")] RWTexture2D<float4> specialTexture; +// snorm with underscore in format name +[vk::image_format("rgba16_snorm")] +RWTexture2D<float4> snormTextureWithUnderscore; + cbuffer C { uint2 index; @@ -30,6 +35,7 @@ float4 main(): SV_Target result += typicalTexture[index]; result += snormTexture[index]; result += specialTexture[index]; + result += snormTextureWithUnderscore[index]; return result; } |
