diff options
| -rw-r--r-- | source/core/slang-uint-set.cpp | 20 | ||||
| -rw-r--r-- | tests/language-feature/capability/profile-implicitly-upgraded.slang | 13 |
2 files changed, 29 insertions, 4 deletions
diff --git a/source/core/slang-uint-set.cpp b/source/core/slang-uint-set.cpp index ec086c5de..1098db6d5 100644 --- a/source/core/slang-uint-set.cpp +++ b/source/core/slang-uint-set.cpp @@ -156,11 +156,23 @@ void UIntSet::subtractWith(const UIntSet& set) /* static */ void UIntSet::calcSubtract(UIntSet& outRs, const UIntSet& set1, const UIntSet& set2) { - outRs.resizeBackingBufferDirectly(set1.m_buffer.getCount()); + const auto set1Count = set1.m_buffer.getCount(); + const auto set2Count = set2.m_buffer.getCount(); - const Index minCount = Math::Min(set1.m_buffer.getCount(), set2.m_buffer.getCount()); - for (Index i = 0; i < minCount; i++) - outRs.m_buffer[i] = set1.m_buffer[i] & (~set2.m_buffer[i]); + outRs.resizeBackingBufferDirectly(set1Count); + + for (Index i = 0; i < set1Count; i++) + { + if (i < set2Count) + { + outRs.m_buffer[i] = set1.m_buffer[i] & (~set2.m_buffer[i]); + } + else + { + // If `set2` is smaller, copy the remaining values from `set1` + outRs.m_buffer[i] = set1.m_buffer[i]; + } + } } /* static */ bool UIntSet::hasIntersection(const UIntSet& set1, const UIntSet& set2) diff --git a/tests/language-feature/capability/profile-implicitly-upgraded.slang b/tests/language-feature/capability/profile-implicitly-upgraded.slang new file mode 100644 index 000000000..b88723182 --- /dev/null +++ b/tests/language-feature/capability/profile-implicitly-upgraded.slang @@ -0,0 +1,13 @@ +//DIAGNOSTIC_TEST:SIMPLE(filecheck=CHECK_SPIRV): -stage fragment -entry fragmentMain -target spirv -profile spirv_1_3 + +// We currently do not have GLSL profiles, pass in SPIRV profile instead. We need +// to pass in a profile parameter to emit the warning. +//DIAGNOSTIC_TEST:SIMPLE(filecheck=CHECK_GLSL): -stage fragment -entry fragmentMain -target glsl -profile spirv_1_3 + +// CHECK_SPIRV: warning 41012{{.*}}'spvImageGatherExtended' +// CHECK_GLSL: warning 41012{{.*}}'GLSL_150 + GL_ARB_texture_gather' +float4 fragmentMain(float2 pos : SV_Position, Sampler2D<float> foo) : SV_Target +{ + return foo.Gather(uint2(pos)); +} + |
