diff options
| -rw-r--r-- | source/slang/slang-emit-metal.cpp | 6 | ||||
| -rw-r--r-- | tests/metal/texture-multisample.slang | 16 |
2 files changed, 19 insertions, 3 deletions
diff --git a/source/slang/slang-emit-metal.cpp b/source/slang/slang-emit-metal.cpp index a2e339942..9232fc95d 100644 --- a/source/slang/slang-emit-metal.cpp +++ b/source/slang/slang-emit-metal.cpp @@ -138,9 +138,9 @@ void MetalSourceEmitter::_emitHLSLTextureType(IRTextureTypeBase* texType) { case SLANG_RESOURCE_ACCESS_READ: { - // Metal does not support access::sample for texture buffers, so we need to emit - // access::read instead. - if (texType->GetBaseShape() == SLANG_TEXTURE_BUFFER) + // Metal does not support access::sample for texture buffers and multisampled textures, + // so we need to emit access::read instead. + if (texType->GetBaseShape() == SLANG_TEXTURE_BUFFER || texType->isMultisample()) m_writer->emit("access::read"); else m_writer->emit("access::sample"); diff --git a/tests/metal/texture-multisample.slang b/tests/metal/texture-multisample.slang new file mode 100644 index 000000000..4bd6e3be0 --- /dev/null +++ b/tests/metal/texture-multisample.slang @@ -0,0 +1,16 @@ +//TEST:SIMPLE(filecheck=METAL): -stage compute -entry computeMain -target metal -DEMIT_SOURCE + +// TEST_INPUT: RWTexture2D(size=4, content = zero, sampleCount=2):name texMS +Texture2DMS<float4> texMS; +// TEST_INPUT: RWTexture2D(size=4, content = zero):name output +RWTexture2D<float4> output; + +[numthreads(1, 1, 1)] +void computeMain() +{ + int2 location = int2(0, 0); + uint sampleIndex = 0; + // METAL: {{.*}}access::read{{.*}} + float4 v = texMS.Load(location, sampleIndex); + output[location] = v; +}
\ No newline at end of file |
