summaryrefslogtreecommitdiff
path: root/tools/gfx/metal/metal-device.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-07-19 11:49:42 -0700
committerGitHub <noreply@github.com>2024-07-19 11:49:42 -0700
commitf114433debfba67cbe1db239b6e92278d41ed438 (patch)
tree3a8ff78deb657d203c87bd22bc2ee83575e834f6 /tools/gfx/metal/metal-device.cpp
parentadf758c8c4032afcd96d995840bd697d2adef34c (diff)
Support parameter block in metal shader objects. (#4671)
* Support parameter block in metal shader objects. * Ingore parameter block tests on devices without tier2 argument buffer. * Fix warning. * Fix texture subscript test. --------- Co-authored-by: Yong He <yhe@nvidia.com>
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);