diff options
Diffstat (limited to 'tools/gfx/metal/metal-device.cpp')
| -rw-r--r-- | tools/gfx/metal/metal-device.cpp | 19 |
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); |
