summaryrefslogtreecommitdiffstats
path: root/tools/gfx/metal/metal-device.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/gfx/metal/metal-device.cpp')
-rw-r--r--tools/gfx/metal/metal-device.cpp19
1 files changed, 18 insertions, 1 deletions
diff --git a/tools/gfx/metal/metal-device.cpp b/tools/gfx/metal/metal-device.cpp
index 4a1c02480..609c1bf27 100644
--- a/tools/gfx/metal/metal-device.cpp
+++ b/tools/gfx/metal/metal-device.cpp
@@ -70,6 +70,12 @@ SlangResult DeviceImpl::initialize(const Desc& desc)
m_device = NS::TransferPtr(MTL::CreateSystemDefaultDevice());
m_commandQueue = NS::TransferPtr(m_device->newCommandQueue(64));
+ m_hasArgumentBufferTier2 = m_device->argumentBuffersSupport() >= MTL::ArgumentBuffersTier2;
+
+ if (m_hasArgumentBufferTier2)
+ {
+ m_features.add("argument-buffer-tier-2");
+ }
SLANG_RETURN_ON_FAIL(slangContext.initialize(
desc.slang,
@@ -415,8 +421,19 @@ Result DeviceImpl::createTextureResource(
}
if (desc.allowedStates.contains(ResourceState::UnorderedAccess))
{
+ textureUsage |= MTL::TextureUsageShaderRead;
textureUsage |= MTL::TextureUsageShaderWrite;
- textureUsage |= MTL::TextureUsageShaderAtomic;
+
+ // Request atomic access if the format allows it.
+ switch (desc.format)
+ {
+ case Format::R32_UINT:
+ case Format::R32_SINT:
+ case Format::R32G32_UINT:
+ case Format::R32G32_SINT:
+ textureUsage |= MTL::TextureUsageShaderAtomic;
+ break;
+ }
}
textureDesc->setMipmapLevelCount(desc.numMipLevels);