diff options
| author | Yong He <yonghe@outlook.com> | 2024-07-19 11:49:42 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-07-19 11:49:42 -0700 |
| commit | f114433debfba67cbe1db239b6e92278d41ed438 (patch) | |
| tree | 3a8ff78deb657d203c87bd22bc2ee83575e834f6 /tools/gfx/metal/metal-device.cpp | |
| parent | adf758c8c4032afcd96d995840bd697d2adef34c (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.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); |
