summaryrefslogtreecommitdiff
path: root/tools/gfx/metal
diff options
context:
space:
mode:
authorEllie Hermaszewska <ellieh@nvidia.com>2024-10-29 14:49:26 +0800
committerGitHub <noreply@github.com>2024-10-29 14:49:26 +0800
commitf65d756bff8d4c5cbc15bd0322a2ae8e6b896a21 (patch)
treeea1d61342cd29368e19135000ec2948813096205 /tools/gfx/metal
parenta729c15e9dce9f5116a38afc66329ab2ca4cea54 (diff)
format
* format * Minor test fixes * enable checking cpp format in ci
Diffstat (limited to 'tools/gfx/metal')
-rw-r--r--tools/gfx/metal/metal-api.cpp2
-rw-r--r--tools/gfx/metal/metal-base.h70
-rw-r--r--tools/gfx/metal/metal-buffer.cpp8
-rw-r--r--tools/gfx/metal/metal-buffer.h6
-rw-r--r--tools/gfx/metal/metal-command-buffer.cpp16
-rw-r--r--tools/gfx/metal/metal-command-buffer.h17
-rw-r--r--tools/gfx/metal/metal-command-encoder.cpp163
-rw-r--r--tools/gfx/metal/metal-command-encoder.h83
-rw-r--r--tools/gfx/metal/metal-command-queue.cpp33
-rw-r--r--tools/gfx/metal/metal-command-queue.h10
-rw-r--r--tools/gfx/metal/metal-device.cpp231
-rw-r--r--tools/gfx/metal/metal-device.h67
-rw-r--r--tools/gfx/metal/metal-fence.cpp5
-rw-r--r--tools/gfx/metal/metal-fence.h7
-rw-r--r--tools/gfx/metal/metal-framebuffer.cpp12
-rw-r--r--tools/gfx/metal/metal-helper-functions.cpp1
-rw-r--r--tools/gfx/metal/metal-pipeline-state.cpp134
-rw-r--r--tools/gfx/metal/metal-query.cpp15
-rw-r--r--tools/gfx/metal/metal-query.h3
-rw-r--r--tools/gfx/metal/metal-render-pass.cpp44
-rw-r--r--tools/gfx/metal/metal-render-pass.h4
-rw-r--r--tools/gfx/metal/metal-resource-views.cpp17
-rw-r--r--tools/gfx/metal/metal-resource-views.h12
-rw-r--r--tools/gfx/metal/metal-sampler.cpp10
-rw-r--r--tools/gfx/metal/metal-sampler.h2
-rw-r--r--tools/gfx/metal/metal-shader-object-layout.cpp58
-rw-r--r--tools/gfx/metal/metal-shader-object-layout.h30
-rw-r--r--tools/gfx/metal/metal-shader-object.cpp196
-rw-r--r--tools/gfx/metal/metal-shader-object.h55
-rw-r--r--tools/gfx/metal/metal-shader-program.cpp17
-rw-r--r--tools/gfx/metal/metal-shader-program.h4
-rw-r--r--tools/gfx/metal/metal-swap-chain.cpp18
-rw-r--r--tools/gfx/metal/metal-swap-chain.h6
-rw-r--r--tools/gfx/metal/metal-texture.cpp9
-rw-r--r--tools/gfx/metal/metal-texture.h3
-rw-r--r--tools/gfx/metal/metal-transient-heap.cpp4
-rw-r--r--tools/gfx/metal/metal-transient-heap.h2
-rw-r--r--tools/gfx/metal/metal-util.cpp541
-rw-r--r--tools/gfx/metal/metal-util.h23
-rw-r--r--tools/gfx/metal/metal-vertex-layout.cpp18
-rw-r--r--tools/gfx/metal/metal-vertex-layout.h3
41 files changed, 1071 insertions, 888 deletions
diff --git a/tools/gfx/metal/metal-api.cpp b/tools/gfx/metal/metal-api.cpp
index aa13a605f..8537cc630 100644
--- a/tools/gfx/metal/metal-api.cpp
+++ b/tools/gfx/metal/metal-api.cpp
@@ -4,5 +4,5 @@
#define CA_PRIVATE_IMPLEMENTATION
#define MTL_PRIVATE_IMPLEMENTATION
#include <Foundation/Foundation.hpp>
-#include <QuartzCore/QuartzCore.hpp>
#include <Metal/Metal.hpp>
+#include <QuartzCore/QuartzCore.hpp>
diff --git a/tools/gfx/metal/metal-base.h b/tools/gfx/metal/metal-base.h
index b1650a655..1a7a9eaff 100644
--- a/tools/gfx/metal/metal-base.h
+++ b/tools/gfx/metal/metal-base.h
@@ -14,41 +14,41 @@ namespace gfx
namespace metal
{
- class DeviceImpl;
- class InputLayoutImpl;
- class BufferResourceImpl;
- class FenceImpl;
- class TextureResourceImpl;
- class SamplerStateImpl;
- class ResourceViewImpl;
- class BufferResourceViewImpl;
- class TextureResourceViewImpl;
- class TexelBufferResourceViewImpl;
- class PlainBufferResourceViewImpl;
- class AccelerationStructureImpl;
- class FramebufferLayoutImpl;
- class RenderPassLayoutImpl;
- class FramebufferImpl;
- class PipelineStateImpl;
- class RayTracingPipelineStateImpl;
- class ShaderObjectLayoutImpl;
- class EntryPointLayout;
- class RootShaderObjectLayoutImpl;
- class ShaderProgramImpl;
- class PipelineCommandEncoder;
- class ShaderObjectImpl;
- class MutableShaderObjectImpl;
- class RootShaderObjectImpl;
- class ShaderTableImpl;
- class ResourceCommandEncoder;
- class RenderCommandEncoder;
- class ComputeCommandEncoder;
- class RayTracingCommandEncoder;
- class CommandBufferImpl;
- class CommandQueueImpl;
- class TransientResourceHeapImpl;
- class QueryPoolImpl;
- class SwapchainImpl;
+class DeviceImpl;
+class InputLayoutImpl;
+class BufferResourceImpl;
+class FenceImpl;
+class TextureResourceImpl;
+class SamplerStateImpl;
+class ResourceViewImpl;
+class BufferResourceViewImpl;
+class TextureResourceViewImpl;
+class TexelBufferResourceViewImpl;
+class PlainBufferResourceViewImpl;
+class AccelerationStructureImpl;
+class FramebufferLayoutImpl;
+class RenderPassLayoutImpl;
+class FramebufferImpl;
+class PipelineStateImpl;
+class RayTracingPipelineStateImpl;
+class ShaderObjectLayoutImpl;
+class EntryPointLayout;
+class RootShaderObjectLayoutImpl;
+class ShaderProgramImpl;
+class PipelineCommandEncoder;
+class ShaderObjectImpl;
+class MutableShaderObjectImpl;
+class RootShaderObjectImpl;
+class ShaderTableImpl;
+class ResourceCommandEncoder;
+class RenderCommandEncoder;
+class ComputeCommandEncoder;
+class RayTracingCommandEncoder;
+class CommandBufferImpl;
+class CommandQueueImpl;
+class TransientResourceHeapImpl;
+class QueryPoolImpl;
+class SwapchainImpl;
} // namespace metal
} // namespace gfx
diff --git a/tools/gfx/metal/metal-buffer.cpp b/tools/gfx/metal/metal-buffer.cpp
index 4f2964c5b..ebb48382e 100644
--- a/tools/gfx/metal/metal-buffer.cpp
+++ b/tools/gfx/metal/metal-buffer.cpp
@@ -1,5 +1,6 @@
// metal-buffer.cpp
#include "metal-buffer.h"
+
#include "metal-util.h"
namespace gfx
@@ -11,14 +12,11 @@ namespace metal
{
BufferResourceImpl::BufferResourceImpl(const IBufferResource::Desc& desc, DeviceImpl* device)
- : Parent(desc)
- , m_device(device)
+ : Parent(desc), m_device(device)
{
}
-BufferResourceImpl::~BufferResourceImpl()
-{
-}
+BufferResourceImpl::~BufferResourceImpl() {}
DeviceAddress BufferResourceImpl::getDeviceAddress()
{
diff --git a/tools/gfx/metal/metal-buffer.h b/tools/gfx/metal/metal-buffer.h
index 3f8f60d0e..d8e95c1f1 100644
--- a/tools/gfx/metal/metal-buffer.h
+++ b/tools/gfx/metal/metal-buffer.h
@@ -25,11 +25,13 @@ public:
virtual SLANG_NO_THROW DeviceAddress SLANG_MCALL getDeviceAddress() override;
- virtual SLANG_NO_THROW Result SLANG_MCALL getNativeResourceHandle(InteropHandle* outHandle) override;
+ virtual SLANG_NO_THROW Result SLANG_MCALL
+ getNativeResourceHandle(InteropHandle* outHandle) override;
virtual SLANG_NO_THROW Result SLANG_MCALL getSharedHandle(InteropHandle* outHandle) override;
- virtual SLANG_NO_THROW Result SLANG_MCALL map(MemoryRange* rangeToRead, void** outPointer) override;
+ virtual SLANG_NO_THROW Result SLANG_MCALL
+ map(MemoryRange* rangeToRead, void** outPointer) override;
virtual SLANG_NO_THROW Result SLANG_MCALL unmap(MemoryRange* writtenRange) override;
diff --git a/tools/gfx/metal/metal-command-buffer.cpp b/tools/gfx/metal/metal-command-buffer.cpp
index 3f9923bf8..19708cfb6 100644
--- a/tools/gfx/metal/metal-command-buffer.cpp
+++ b/tools/gfx/metal/metal-command-buffer.cpp
@@ -1,10 +1,10 @@
// metal-command-buffer.cpp
#include "metal-command-buffer.h"
-#include "metal-device.h"
#include "metal-command-encoder.h"
-#include "metal-shader-object.h"
#include "metal-command-queue.h"
+#include "metal-device.h"
+#include "metal-shader-object.h"
namespace gfx
{
@@ -29,7 +29,9 @@ Result CommandBufferImpl::init(DeviceImpl* device, TransientResourceHeapImpl* tr
}
void CommandBufferImpl::encodeRenderCommands(
- IRenderPassLayout* renderPass, IFramebuffer* framebuffer, IRenderCommandEncoder** outEncoder)
+ IRenderPassLayout* renderPass,
+ IFramebuffer* framebuffer,
+ IRenderCommandEncoder** outEncoder)
{
if (!m_renderCommandEncoder)
{
@@ -72,7 +74,7 @@ void CommandBufferImpl::encodeRayTracingCommands(IRayTracingCommandEncoder** out
void CommandBufferImpl::close()
{
- //m_commandBuffer->commit();
+ // m_commandBuffer->commit();
}
Result CommandBufferImpl::getNativeHandle(InteropHandle* outHandle)
@@ -82,12 +84,14 @@ Result CommandBufferImpl::getNativeHandle(InteropHandle* outHandle)
return SLANG_OK;
}
-MTL::RenderCommandEncoder* CommandBufferImpl::getMetalRenderCommandEncoder(MTL::RenderPassDescriptor* renderPassDesc)
+MTL::RenderCommandEncoder* CommandBufferImpl::getMetalRenderCommandEncoder(
+ MTL::RenderPassDescriptor* renderPassDesc)
{
if (!m_metalRenderCommandEncoder)
{
endMetalCommandEncoder();
- m_metalRenderCommandEncoder = NS::RetainPtr(m_commandBuffer->renderCommandEncoder(renderPassDesc));
+ m_metalRenderCommandEncoder =
+ NS::RetainPtr(m_commandBuffer->renderCommandEncoder(renderPassDesc));
}
return m_metalRenderCommandEncoder.get();
}
diff --git a/tools/gfx/metal/metal-command-buffer.h b/tools/gfx/metal/metal-command-buffer.h
index f0b36898d..1f791d174 100644
--- a/tools/gfx/metal/metal-command-buffer.h
+++ b/tools/gfx/metal/metal-command-buffer.h
@@ -1,10 +1,10 @@
// metal-command-buffer.h
#pragma once
+#include "../simple-transient-resource-heap.h"
#include "metal-base.h"
-#include "metal-shader-object.h"
#include "metal-command-encoder.h"
-#include "../simple-transient-resource-heap.h"
+#include "metal-shader-object.h"
namespace gfx
{
@@ -14,9 +14,7 @@ using namespace Slang;
namespace metal
{
-class CommandBufferImpl
- : public ICommandBuffer
- , public ComObject
+class CommandBufferImpl : public ICommandBuffer, public ComObject
{
public:
SLANG_COM_OBJECT_IUNKNOWN_ALL
@@ -45,7 +43,8 @@ public:
void beginCommandBuffer();
- MTL::RenderCommandEncoder* getMetalRenderCommandEncoder(MTL::RenderPassDescriptor* renderPassDesc);
+ MTL::RenderCommandEncoder* getMetalRenderCommandEncoder(
+ MTL::RenderPassDescriptor* renderPassDesc);
MTL::ComputeCommandEncoder* getMetalComputeCommandEncoder();
MTL::BlitCommandEncoder* getMetalBlitCommandEncoder();
void endMetalCommandEncoder();
@@ -56,11 +55,11 @@ public:
IFramebuffer* framebuffer,
IRenderCommandEncoder** outEncoder) override;
virtual SLANG_NO_THROW void SLANG_MCALL
- encodeComputeCommands(IComputeCommandEncoder** outEncoder) override;
+ encodeComputeCommands(IComputeCommandEncoder** outEncoder) override;
virtual SLANG_NO_THROW void SLANG_MCALL
- encodeResourceCommands(IResourceCommandEncoder** outEncoder) override;
+ encodeResourceCommands(IResourceCommandEncoder** outEncoder) override;
virtual SLANG_NO_THROW void SLANG_MCALL
- encodeRayTracingCommands(IRayTracingCommandEncoder** outEncoder) override;
+ encodeRayTracingCommands(IRayTracingCommandEncoder** outEncoder) override;
virtual SLANG_NO_THROW void SLANG_MCALL close() override;
virtual SLANG_NO_THROW Result SLANG_MCALL getNativeHandle(InteropHandle* outHandle) override;
};
diff --git a/tools/gfx/metal/metal-command-encoder.cpp b/tools/gfx/metal/metal-command-encoder.cpp
index 442c216aa..f4c393193 100644
--- a/tools/gfx/metal/metal-command-encoder.cpp
+++ b/tools/gfx/metal/metal-command-encoder.cpp
@@ -3,6 +3,7 @@
#include "metal-buffer.h"
#include "metal-command-buffer.h"
+#include "metal-helper-functions.h"
#include "metal-query.h"
#include "metal-render-pass.h"
#include "metal-resource-views.h"
@@ -12,8 +13,6 @@
#include "metal-texture.h"
#include "metal-util.h"
-#include "metal-helper-functions.h"
-
namespace gfx
{
@@ -33,7 +32,9 @@ void PipelineCommandEncoder::endEncodingImpl()
m_commandBuffer->endMetalCommandEncoder();
}
-Result PipelineCommandEncoder::setPipelineStateImpl(IPipelineState* state, IShaderObject** outRootObject)
+Result PipelineCommandEncoder::setPipelineStateImpl(
+ IPipelineState* state,
+ IShaderObject** outRootObject)
{
m_currentPipeline = static_cast<PipelineStateImpl*>(state);
// m_commandBuffer->m_mutableRootShaderObject = nullptr;
@@ -52,11 +53,18 @@ void ResourceCommandEncoder::endEncoding()
void ResourceCommandEncoder::writeTimestamp(IQueryPool* queryPool, GfxIndex index)
{
auto encoder = m_commandBuffer->getMetalBlitCommandEncoder();
- encoder->sampleCountersInBuffer(static_cast<QueryPoolImpl*>(queryPool)->m_counterSampleBuffer.get(), index, true);
+ encoder->sampleCountersInBuffer(
+ static_cast<QueryPoolImpl*>(queryPool)->m_counterSampleBuffer.get(),
+ index,
+ true);
}
void ResourceCommandEncoder::copyBuffer(
- IBufferResource* dst, Offset dstOffset, IBufferResource* src, Offset srcOffset, Size size)
+ IBufferResource* dst,
+ Offset dstOffset,
+ IBufferResource* src,
+ Offset srcOffset,
+ Size size)
{
auto encoder = m_commandBuffer->getMetalBlitCommandEncoder();
encoder->copyFromBuffer(
@@ -80,7 +88,8 @@ void ResourceCommandEncoder::copyTexture(
{
auto encoder = m_commandBuffer->getMetalBlitCommandEncoder();
- if (dstSubresource.layerCount == 0 && dstSubresource.mipLevelCount == 0 && srcSubresource.layerCount == 0 && srcSubresource.mipLevelCount == 0)
+ if (dstSubresource.layerCount == 0 && dstSubresource.mipLevelCount == 0 &&
+ srcSubresource.layerCount == 0 && srcSubresource.mipLevelCount == 0)
{
encoder->copyFromTexture(
static_cast<TextureResourceImpl*>(src)->m_texture.get(),
@@ -131,7 +140,10 @@ void ResourceCommandEncoder::copyTextureToBuffer(
}
void ResourceCommandEncoder::uploadBufferData(
- IBufferResource* buffer, Offset offset, Size size, void* data)
+ IBufferResource* buffer,
+ Offset offset,
+ Size size,
+ void* data)
{
SLANG_UNIMPLEMENTED_X("uploadBufferData");
}
@@ -148,13 +160,19 @@ void ResourceCommandEncoder::uploadTextureData(
}
void ResourceCommandEncoder::bufferBarrier(
- GfxCount count, IBufferResource* const* buffers, ResourceState src, ResourceState dst)
+ GfxCount count,
+ IBufferResource* const* buffers,
+ ResourceState src,
+ ResourceState dst)
{
// We use automatic hazard tracking for now, no need for barriers.
}
void ResourceCommandEncoder::textureBarrier(
- GfxCount count, ITextureResource* const* textures, ResourceState src, ResourceState dst)
+ GfxCount count,
+ ITextureResource* const* textures,
+ ResourceState src,
+ ResourceState dst)
{
// We use automatic hazard tracking for now, no need for barriers.
}
@@ -169,7 +187,9 @@ void ResourceCommandEncoder::textureSubresourceBarrier(
}
void ResourceCommandEncoder::clearResourceView(
- IResourceView* view, ClearValue* clearValue, ClearResourceViewFlags::Enum flags)
+ IResourceView* view,
+ ClearValue* clearValue,
+ ClearResourceViewFlags::Enum flags)
{
SLANG_UNIMPLEMENTED_X("clearResourceView");
}
@@ -186,7 +206,11 @@ void ResourceCommandEncoder::resolveResource(
}
void ResourceCommandEncoder::resolveQuery(
- IQueryPool* queryPool, GfxIndex index, GfxCount count, IBufferResource* buffer, Offset offset)
+ IQueryPool* queryPool,
+ GfxIndex index,
+ GfxCount count,
+ IBufferResource* buffer,
+ Offset offset)
{
auto encoder = m_commandBuffer->getMetalBlitCommandEncoder();
encoder->resolveCounters(
@@ -226,7 +250,8 @@ void RenderCommandEncoder::beginPass(IRenderPassLayout* renderPass, IFramebuffer
for (Index i = 0; i < m_framebuffer->m_renderTargetViews.getCount(); ++i)
{
TextureResourceViewImpl* renderTargetView = m_framebuffer->m_renderTargetViews[i];
- MTL::RenderPassColorAttachmentDescriptor* colorAttachment = m_renderPassDesc->colorAttachments()->object(i);
+ MTL::RenderPassColorAttachmentDescriptor* colorAttachment =
+ m_renderPassDesc->colorAttachments()->object(i);
colorAttachment->setTexture(renderTargetView->m_textureView.get());
colorAttachment->setLevel(renderTargetView->m_desc.subresourceRange.mipLevel);
colorAttachment->setSlice(renderTargetView->m_desc.subresourceRange.baseArrayLayer);
@@ -235,17 +260,20 @@ void RenderCommandEncoder::beginPass(IRenderPassLayout* renderPass, IFramebuffer
if (m_framebuffer->m_depthStencilView)
{
TextureResourceViewImpl* depthStencilView = m_framebuffer->m_depthStencilView.get();
- MTL::PixelFormat pixelFormat = MetalUtil::translatePixelFormat(depthStencilView->m_desc.format);
+ MTL::PixelFormat pixelFormat =
+ MetalUtil::translatePixelFormat(depthStencilView->m_desc.format);
if (MetalUtil::isDepthFormat(pixelFormat))
{
- MTL::RenderPassDepthAttachmentDescriptor* depthAttachment = m_renderPassDesc->depthAttachment();
+ MTL::RenderPassDepthAttachmentDescriptor* depthAttachment =
+ m_renderPassDesc->depthAttachment();
depthAttachment->setTexture(depthStencilView->m_textureView.get());
depthAttachment->setLevel(depthStencilView->m_desc.subresourceRange.mipLevel);
depthAttachment->setSlice(depthStencilView->m_desc.subresourceRange.baseArrayLayer);
}
if (MetalUtil::isStencilFormat(pixelFormat))
{
- MTL::RenderPassStencilAttachmentDescriptor* stencilAttachment = m_renderPassDesc->stencilAttachment();
+ MTL::RenderPassStencilAttachmentDescriptor* stencilAttachment =
+ m_renderPassDesc->stencilAttachment();
stencilAttachment->setTexture(depthStencilView->m_textureView.get());
stencilAttachment->setLevel(depthStencilView->m_desc.subresourceRange.mipLevel);
stencilAttachment->setSlice(depthStencilView->m_desc.subresourceRange.baseArrayLayer);
@@ -259,13 +287,15 @@ void RenderCommandEncoder::endEncoding()
}
Result RenderCommandEncoder::bindPipeline(
- IPipelineState* pipelineState, IShaderObject** outRootObject)
+ IPipelineState* pipelineState,
+ IShaderObject** outRootObject)
{
return setPipelineStateImpl(pipelineState, outRootObject);
}
Result RenderCommandEncoder::bindPipelineWithRootObject(
- IPipelineState* pipelineState, IShaderObject* rootObject)
+ IPipelineState* pipelineState,
+ IShaderObject* rootObject)
{
return SLANG_E_NOT_IMPLEMENTED;
}
@@ -324,21 +354,18 @@ void RenderCommandEncoder::setVertexBuffers(
}
void RenderCommandEncoder::setIndexBuffer(
- IBufferResource* buffer, Format indexFormat, Offset offset)
+ IBufferResource* buffer,
+ Format indexFormat,
+ Offset offset)
{
m_indexBuffer = static_cast<BufferResourceImpl*>(buffer)->m_buffer.get();
m_indexBufferOffset = offset;
switch (indexFormat)
{
- case Format::R16_UINT:
- m_indexBufferType = MTL::IndexTypeUInt16;
- break;
- case Format::R32_UINT:
- m_indexBufferType = MTL::IndexTypeUInt32;
- break;
- default:
- assert(!"unsupported index format");
+ case Format::R16_UINT: m_indexBufferType = MTL::IndexTypeUInt16; break;
+ case Format::R32_UINT: m_indexBufferType = MTL::IndexTypeUInt32; break;
+ default: assert(!"unsupported index format");
}
}
@@ -348,7 +375,9 @@ void RenderCommandEncoder::setStencilReference(uint32_t referenceValue)
}
Result RenderCommandEncoder::setSamplePositions(
- GfxCount samplesPerPixel, GfxCount pixelCount, const SamplePosition* samplePositions)
+ GfxCount samplesPerPixel,
+ GfxCount pixelCount,
+ const SamplePosition* samplePositions)
{
return SLANG_E_NOT_AVAILABLE;
}
@@ -368,7 +397,10 @@ Result RenderCommandEncoder::prepareDraw(MTL::RenderCommandEncoder*& encoder)
for (Index i = 0; i < m_vertexBuffers.getCount(); ++i)
{
- encoder->setVertexBuffer(m_vertexBuffers[i], m_vertexBufferOffsets[i], m_currentPipeline->m_vertexBufferOffset + i);
+ encoder->setVertexBuffer(
+ m_vertexBuffers[i],
+ m_vertexBufferOffsets[i],
+ m_currentPipeline->m_vertexBufferOffset + i);
}
encoder->setViewports(m_viewports.getArrayView().getBuffer(), m_viewports.getCount());
@@ -378,8 +410,13 @@ Result RenderCommandEncoder::prepareDraw(MTL::RenderCommandEncoder*& encoder)
const DepthStencilDesc& depthStencilDesc = pipeline->desc.graphics.depthStencil;
encoder->setFrontFacingWinding(MetalUtil::translateWinding(rasterDesc.frontFace));
encoder->setCullMode(MetalUtil::translateCullMode(rasterDesc.cullMode));
- encoder->setDepthClipMode(rasterDesc.depthClipEnable ? MTL::DepthClipModeClip : MTL::DepthClipModeClamp); // TODO correct?
- encoder->setDepthBias(rasterDesc.depthBias, rasterDesc.slopeScaledDepthBias, rasterDesc.depthBiasClamp);
+ encoder->setDepthClipMode(
+ rasterDesc.depthClipEnable ? MTL::DepthClipModeClip
+ : MTL::DepthClipModeClamp); // TODO correct?
+ encoder->setDepthBias(
+ rasterDesc.depthBias,
+ rasterDesc.slopeScaledDepthBias,
+ rasterDesc.depthBiasClamp);
encoder->setTriangleFillMode(MetalUtil::translateTriangleFillMode(rasterDesc.fillMode));
// encoder->setBlendColor(); // not supported by gfx
if (m_framebuffer->m_depthStencilView)
@@ -400,12 +437,19 @@ Result RenderCommandEncoder::draw(GfxCount vertexCount, GfxIndex startVertex)
}
Result RenderCommandEncoder::drawIndexed(
- GfxCount indexCount, GfxIndex startIndex, GfxIndex baseVertex)
+ GfxCount indexCount,
+ GfxIndex startIndex,
+ GfxIndex baseVertex)
{
MTL::RenderCommandEncoder* encoder;
SLANG_RETURN_ON_FAIL(prepareDraw(encoder));
// TODO baseVertex is not supported by Metal
- encoder->drawIndexedPrimitives(m_primitiveType, indexCount, m_indexBufferType, m_indexBuffer, m_indexBufferOffset);
+ encoder->drawIndexedPrimitives(
+ m_primitiveType,
+ indexCount,
+ m_indexBufferType,
+ m_indexBuffer,
+ m_indexBufferOffset);
return SLANG_OK;
}
@@ -437,7 +481,12 @@ Result RenderCommandEncoder::drawInstanced(
{
MTL::RenderCommandEncoder* encoder;
SLANG_RETURN_ON_FAIL(prepareDraw(encoder));
- encoder->drawPrimitives(m_primitiveType, startVertex, vertexCount, instanceCount, startInstanceLocation);
+ encoder->drawPrimitives(
+ m_primitiveType,
+ startVertex,
+ vertexCount,
+ instanceCount,
+ startInstanceLocation);
return SLANG_OK;
}
@@ -450,7 +499,15 @@ Result RenderCommandEncoder::drawIndexedInstanced(
{
MTL::RenderCommandEncoder* encoder;
SLANG_RETURN_ON_FAIL(prepareDraw(encoder));
- encoder->drawIndexedPrimitives(m_primitiveType, indexCount, m_indexBufferType, m_indexBuffer, startIndexLocation, instanceCount, baseVertexLocation, startIndexLocation);
+ encoder->drawIndexedPrimitives(
+ m_primitiveType,
+ indexCount,
+ m_indexBufferType,
+ m_indexBuffer,
+ startIndexLocation,
+ instanceCount,
+ baseVertexLocation,
+ startIndexLocation);
return SLANG_OK;
}
@@ -465,13 +522,15 @@ void ComputeCommandEncoder::endEncoding()
}
Result ComputeCommandEncoder::bindPipeline(
- IPipelineState* pipelineState, IShaderObject** outRootObject)
+ IPipelineState* pipelineState,
+ IShaderObject** outRootObject)
{
return setPipelineStateImpl(pipelineState, outRootObject);
}
Result ComputeCommandEncoder::bindPipelineWithRootObject(
- IPipelineState* pipelineState, IShaderObject* rootObject)
+ IPipelineState* pipelineState,
+ IShaderObject* rootObject)
{
return SLANG_E_NOT_IMPLEMENTED;
}
@@ -489,16 +548,18 @@ Result ComputeCommandEncoder::dispatchCompute(int x, int y, int z)
RootShaderObjectImpl* rootObjectImpl = &m_commandBuffer->m_rootObject;
RefPtr<PipelineStateBase> newPipeline;
SLANG_RETURN_ON_FAIL(m_commandBuffer->m_device->maybeSpecializePipeline(
- m_currentPipeline, rootObjectImpl, newPipeline));
+ m_currentPipeline,
+ rootObjectImpl,
+ newPipeline));
PipelineStateImpl* newPipelineImpl = static_cast<PipelineStateImpl*>(newPipeline.Ptr());
SLANG_RETURN_ON_FAIL(newPipelineImpl->ensureAPIPipelineStateCreated());
m_currentPipeline = newPipelineImpl;
-
+
m_currentPipeline->ensureAPIPipelineStateCreated();
encoder->setComputePipelineState(m_currentPipeline->m_computePipelineState.get());
-
+
encoder->dispatchThreadgroups(MTL::Size(x, y, z), m_currentPipeline->m_threadGroupSize);
return SLANG_OK;
@@ -533,7 +594,9 @@ void RayTracingCommandEncoder::buildAccelerationStructure(
}
void RayTracingCommandEncoder::copyAccelerationStructure(
- IAccelerationStructure* dest, IAccelerationStructure* src, AccelerationStructureCopyMode mode)
+ IAccelerationStructure* dest,
+ IAccelerationStructure* src,
+ AccelerationStructureCopyMode mode)
{
}
@@ -544,26 +607,34 @@ void RayTracingCommandEncoder::queryAccelerationStructureProperties(
AccelerationStructureQueryDesc* queryDescs)
{
_queryAccelerationStructureProperties(
- accelerationStructureCount, accelerationStructures, queryCount, queryDescs);
+ accelerationStructureCount,
+ accelerationStructures,
+ queryCount,
+ queryDescs);
}
void RayTracingCommandEncoder::serializeAccelerationStructure(
- DeviceAddress dest, IAccelerationStructure* source)
+ DeviceAddress dest,
+ IAccelerationStructure* source)
{
}
void RayTracingCommandEncoder::deserializeAccelerationStructure(
- IAccelerationStructure* dest, DeviceAddress source)
+ IAccelerationStructure* dest,
+ DeviceAddress source)
{
}
-Result RayTracingCommandEncoder::bindPipeline(IPipelineState* pipeline, IShaderObject** outRootObject)
+Result RayTracingCommandEncoder::bindPipeline(
+ IPipelineState* pipeline,
+ IShaderObject** outRootObject)
{
return SLANG_E_NOT_IMPLEMENTED;
}
Result RayTracingCommandEncoder::bindPipelineWithRootObject(
- IPipelineState* pipelineState, IShaderObject* rootObject)
+ IPipelineState* pipelineState,
+ IShaderObject* rootObject)
{
return SLANG_E_NOT_IMPLEMENTED;
}
@@ -578,7 +649,7 @@ Result RayTracingCommandEncoder::dispatchRays(
return SLANG_E_NOT_IMPLEMENTED;
}
-void RayTracingCommandEncoder::endEncoding() { }
+void RayTracingCommandEncoder::endEncoding() {}
} // namespace metal
} // namespace gfx
diff --git a/tools/gfx/metal/metal-command-encoder.h b/tools/gfx/metal/metal-command-encoder.h
index 8ef9e5fb5..9ca53f745 100644
--- a/tools/gfx/metal/metal-command-encoder.h
+++ b/tools/gfx/metal/metal-command-encoder.h
@@ -24,12 +24,9 @@ public:
void endEncodingImpl();
Result setPipelineStateImpl(IPipelineState* state, IShaderObject** outRootObject);
-
};
-class ResourceCommandEncoder
- : public IResourceCommandEncoder
- , public PipelineCommandEncoder
+class ResourceCommandEncoder : public IResourceCommandEncoder, public PipelineCommandEncoder
{
public:
virtual void* getInterface(SlangUUID const& guid)
@@ -39,7 +36,7 @@ public:
return nullptr;
}
virtual SLANG_NO_THROW SlangResult SLANG_MCALL
- queryInterface(SlangUUID const& uuid, void** outObject) override
+ queryInterface(SlangUUID const& uuid, void** outObject) override
{
if (auto ptr = getInterface(uuid))
{
@@ -54,7 +51,7 @@ public:
virtual SLANG_NO_THROW void SLANG_MCALL endEncoding() override;
virtual SLANG_NO_THROW void SLANG_MCALL
- writeTimestamp(IQueryPool* queryPool, GfxIndex index) override;
+ writeTimestamp(IQueryPool* queryPool, GfxIndex index) override;
virtual SLANG_NO_THROW void SLANG_MCALL copyBuffer(
IBufferResource* dst,
@@ -86,7 +83,7 @@ public:
ITextureResource::Extents extent) override;
virtual SLANG_NO_THROW void SLANG_MCALL
- uploadBufferData(IBufferResource* buffer, Offset offset, Size size, void* data) override;
+ uploadBufferData(IBufferResource* buffer, Offset offset, Size size, void* data) override;
virtual SLANG_NO_THROW void SLANG_MCALL uploadTextureData(
ITextureResource* dst,
@@ -122,7 +119,9 @@ public:
ClearResourceViewFlags::Enum flags);
virtual SLANG_NO_THROW void SLANG_MCALL clearResourceView(
- IResourceView* view, ClearValue* clearValue, ClearResourceViewFlags::Enum flags) override;
+ IResourceView* view,
+ ClearValue* clearValue,
+ ClearResourceViewFlags::Enum flags) override;
virtual SLANG_NO_THROW void SLANG_MCALL resolveResource(
ITextureResource* source,
@@ -140,25 +139,24 @@ public:
Offset offset) override;
-
virtual SLANG_NO_THROW void SLANG_MCALL
- beginDebugEvent(const char* name, float rgbColor[3]) override;
+ beginDebugEvent(const char* name, float rgbColor[3]) override;
virtual SLANG_NO_THROW void SLANG_MCALL endDebugEvent() override;
};
-class RenderCommandEncoder
- : public IRenderCommandEncoder
- , public ResourceCommandEncoder
+class RenderCommandEncoder : public IRenderCommandEncoder, public ResourceCommandEncoder
{
SLANG_GFX_FORWARD_RESOURCE_COMMAND_ENCODER_IMPL(ResourceCommandEncoder)
virtual void* getInterface(SlangUUID const& uuid) override
{
- if (uuid == GfxGUID::IID_IResourceCommandEncoder || uuid == GfxGUID::IID_IRenderCommandEncoder || uuid == ISlangUnknown::getTypeGuid())
+ if (uuid == GfxGUID::IID_IResourceCommandEncoder ||
+ uuid == GfxGUID::IID_IRenderCommandEncoder || uuid == ISlangUnknown::getTypeGuid())
{
return this;
}
return nullptr;
}
+
public:
RefPtr<RenderPassLayoutImpl> m_renderPassLayout;
RefPtr<FramebufferImpl> m_framebuffer;
@@ -183,19 +181,19 @@ public:
virtual SLANG_NO_THROW void SLANG_MCALL endEncoding() override;
virtual SLANG_NO_THROW Result SLANG_MCALL
- bindPipeline(IPipelineState* pipelineState, IShaderObject** outRootObject) override;
+ bindPipeline(IPipelineState* pipelineState, IShaderObject** outRootObject) override;
- virtual SLANG_NO_THROW Result SLANG_MCALL bindPipelineWithRootObject(
- IPipelineState* pipelineState, IShaderObject* rootObject) override;
+ virtual SLANG_NO_THROW Result SLANG_MCALL
+ bindPipelineWithRootObject(IPipelineState* pipelineState, IShaderObject* rootObject) override;
virtual SLANG_NO_THROW void SLANG_MCALL
- setViewports(GfxCount count, const Viewport* viewports) override;
+ setViewports(GfxCount count, const Viewport* viewports) override;
virtual SLANG_NO_THROW void SLANG_MCALL
- setScissorRects(GfxCount count, const ScissorRect* rects) override;
+ setScissorRects(GfxCount count, const ScissorRect* rects) override;
virtual SLANG_NO_THROW void SLANG_MCALL
- setPrimitiveTopology(PrimitiveTopology topology) override;
+ setPrimitiveTopology(PrimitiveTopology topology) override;
virtual SLANG_NO_THROW void SLANG_MCALL setVertexBuffers(
GfxIndex startSlot,
@@ -204,7 +202,7 @@ public:
const Offset* offsets) override;
virtual SLANG_NO_THROW void SLANG_MCALL
- setIndexBuffer(IBufferResource* buffer, Format indexFormat, Offset offset = 0) override;
+ setIndexBuffer(IBufferResource* buffer, Format indexFormat, Offset offset = 0) override;
virtual SLANG_NO_THROW void SLANG_MCALL setStencilReference(uint32_t referenceValue) override;
@@ -216,9 +214,9 @@ public:
Result prepareDraw(MTL::RenderCommandEncoder*& encoder);
virtual SLANG_NO_THROW Result SLANG_MCALL
- draw(GfxCount vertexCount, GfxIndex startVertex = 0) override;
+ draw(GfxCount vertexCount, GfxIndex startVertex = 0) override;
virtual SLANG_NO_THROW Result SLANG_MCALL
- drawIndexed(GfxCount indexCount, GfxIndex startIndex = 0, GfxIndex baseVertex = 0) override;
+ drawIndexed(GfxCount indexCount, GfxIndex startIndex = 0, GfxIndex baseVertex = 0) override;
virtual SLANG_NO_THROW Result SLANG_MCALL drawIndirect(
GfxCount maxDrawCount,
@@ -247,19 +245,17 @@ public:
GfxIndex baseVertexLocation,
GfxIndex startInstanceLocation) override;
- virtual SLANG_NO_THROW Result SLANG_MCALL
- drawMeshTasks(int x, int y, int z) override;
+ virtual SLANG_NO_THROW Result SLANG_MCALL drawMeshTasks(int x, int y, int z) override;
};
-class ComputeCommandEncoder
- : public IComputeCommandEncoder
- , public ResourceCommandEncoder
+class ComputeCommandEncoder : public IComputeCommandEncoder, public ResourceCommandEncoder
{
public:
SLANG_GFX_FORWARD_RESOURCE_COMMAND_ENCODER_IMPL(ResourceCommandEncoder)
virtual void* getInterface(SlangUUID const& uuid) override
{
- if (uuid == GfxGUID::IID_IResourceCommandEncoder || uuid == GfxGUID::IID_IComputeCommandEncoder || uuid == ISlangUnknown::getTypeGuid())
+ if (uuid == GfxGUID::IID_IResourceCommandEncoder ||
+ uuid == GfxGUID::IID_IComputeCommandEncoder || uuid == ISlangUnknown::getTypeGuid())
{
return this;
}
@@ -269,33 +265,32 @@ public:
virtual SLANG_NO_THROW void SLANG_MCALL endEncoding() override;
virtual SLANG_NO_THROW Result SLANG_MCALL
- bindPipeline(IPipelineState* pipelineState, IShaderObject** outRootObject) override;
+ bindPipeline(IPipelineState* pipelineState, IShaderObject** outRootObject) override;
- virtual SLANG_NO_THROW Result SLANG_MCALL bindPipelineWithRootObject(
- IPipelineState* pipelineState, IShaderObject* rootObject) override;
+ virtual SLANG_NO_THROW Result SLANG_MCALL
+ bindPipelineWithRootObject(IPipelineState* pipelineState, IShaderObject* rootObject) override;
virtual SLANG_NO_THROW Result SLANG_MCALL dispatchCompute(int x, int y, int z) override;
virtual SLANG_NO_THROW Result SLANG_MCALL
- dispatchComputeIndirect(IBufferResource* argBuffer, Offset offset) override;
+ dispatchComputeIndirect(IBufferResource* argBuffer, Offset offset) override;
};
-class RayTracingCommandEncoder
- : public IRayTracingCommandEncoder
- , public ResourceCommandEncoder
+class RayTracingCommandEncoder : public IRayTracingCommandEncoder, public ResourceCommandEncoder
{
public:
SLANG_GFX_FORWARD_RESOURCE_COMMAND_ENCODER_IMPL(ResourceCommandEncoder)
virtual void* getInterface(SlangUUID const& uuid) override
{
- if (uuid == GfxGUID::IID_IResourceCommandEncoder || uuid == GfxGUID::IID_IRayTracingCommandEncoder || uuid == ISlangUnknown::getTypeGuid())
+ if (uuid == GfxGUID::IID_IResourceCommandEncoder ||
+ uuid == GfxGUID::IID_IRayTracingCommandEncoder || uuid == ISlangUnknown::getTypeGuid())
{
return this;
}
return nullptr;
}
-public:
+public:
void _memoryBarrier(
int count,
IAccelerationStructure* const* structures,
@@ -325,16 +320,16 @@ public:
AccelerationStructureQueryDesc* queryDescs) override;
virtual SLANG_NO_THROW void SLANG_MCALL
- serializeAccelerationStructure(DeviceAddress dest, IAccelerationStructure* source) override;
+ serializeAccelerationStructure(DeviceAddress dest, IAccelerationStructure* source) override;
- virtual SLANG_NO_THROW void SLANG_MCALL deserializeAccelerationStructure(
- IAccelerationStructure* dest, DeviceAddress source) override;
+ virtual SLANG_NO_THROW void SLANG_MCALL
+ deserializeAccelerationStructure(IAccelerationStructure* dest, DeviceAddress source) override;
virtual SLANG_NO_THROW Result SLANG_MCALL
- bindPipeline(IPipelineState* pipeline, IShaderObject** outRootObject) override;
+ bindPipeline(IPipelineState* pipeline, IShaderObject** outRootObject) override;
- virtual SLANG_NO_THROW Result SLANG_MCALL bindPipelineWithRootObject(
- IPipelineState* pipelineState, IShaderObject* rootObject) override;
+ virtual SLANG_NO_THROW Result SLANG_MCALL
+ bindPipelineWithRootObject(IPipelineState* pipelineState, IShaderObject* rootObject) override;
virtual SLANG_NO_THROW Result SLANG_MCALL dispatchRays(
GfxIndex raygenShaderIndex,
diff --git a/tools/gfx/metal/metal-command-queue.cpp b/tools/gfx/metal/metal-command-queue.cpp
index 920b6ef7e..4175076da 100644
--- a/tools/gfx/metal/metal-command-queue.cpp
+++ b/tools/gfx/metal/metal-command-queue.cpp
@@ -10,7 +10,7 @@ namespace gfx
using namespace Slang;
-namespace metal
+namespace metal
{
ICommandQueue* CommandQueueImpl::getInterface(const Guid& guid)
@@ -20,9 +20,7 @@ ICommandQueue* CommandQueueImpl::getInterface(const Guid& guid)
return nullptr;
}
-CommandQueueImpl::~CommandQueueImpl()
-{
-}
+CommandQueueImpl::~CommandQueueImpl() {}
void CommandQueueImpl::init(DeviceImpl* device, NS::SharedPtr<MTL::CommandQueue> commandQueue)
{
@@ -42,10 +40,15 @@ Result CommandQueueImpl::getNativeHandle(InteropHandle* outHandle)
return SLANG_OK;
}
-const CommandQueueImpl::Desc& CommandQueueImpl::getDesc() { return m_desc; }
+const CommandQueueImpl::Desc& CommandQueueImpl::getDesc()
+{
+ return m_desc;
+}
Result CommandQueueImpl::waitForFenceValuesOnDevice(
- GfxCount fenceCount, IFence** fences, uint64_t* waitValues)
+ GfxCount fenceCount,
+ IFence** fences,
+ uint64_t* waitValues)
{
for (GfxCount i = 0; i < fenceCount; ++i)
{
@@ -58,7 +61,10 @@ Result CommandQueueImpl::waitForFenceValuesOnDevice(
}
void CommandQueueImpl::queueSubmitImpl(
- uint32_t count, ICommandBuffer* const* commandBuffers, IFence* fence, uint64_t valueToSignal)
+ uint32_t count,
+ ICommandBuffer* const* commandBuffers,
+ IFence* fence,
+ uint64_t valueToSignal)
{
// If there are any pending wait fences, encode them to a new command buffer.
// Metal ensures that command buffers are executed in the order they are committed.
@@ -79,7 +85,9 @@ void CommandQueueImpl::queueSubmitImpl(
// If this is the last command buffer and a fence is provided, signal the fence.
if (i == count - 1 && fence != nullptr)
{
- cmdBufImpl->m_commandBuffer->encodeSignalEvent(static_cast<FenceImpl*>(fence)->m_event.get(), valueToSignal);
+ cmdBufImpl->m_commandBuffer->encodeSignalEvent(
+ static_cast<FenceImpl*>(fence)->m_event.get(),
+ valueToSignal);
}
cmdBufImpl->m_commandBuffer->commit();
}
@@ -88,13 +96,18 @@ void CommandQueueImpl::queueSubmitImpl(
if (count == 0 && fence != nullptr)
{
MTL::CommandBuffer* commandBuffer = m_commandQueue->commandBuffer();
- commandBuffer->encodeSignalEvent(static_cast<FenceImpl*>(fence)->m_event.get(), valueToSignal);
+ commandBuffer->encodeSignalEvent(
+ static_cast<FenceImpl*>(fence)->m_event.get(),
+ valueToSignal);
commandBuffer->commit();
}
}
void CommandQueueImpl::executeCommandBuffers(
- GfxCount count, ICommandBuffer* const* commandBuffers, IFence* fence, uint64_t valueToSignal)
+ GfxCount count,
+ ICommandBuffer* const* commandBuffers,
+ IFence* fence,
+ uint64_t valueToSignal)
{
AUTORELEASEPOOL
diff --git a/tools/gfx/metal/metal-command-queue.h b/tools/gfx/metal/metal-command-queue.h
index 045f4ed73..1f825360b 100644
--- a/tools/gfx/metal/metal-command-queue.h
+++ b/tools/gfx/metal/metal-command-queue.h
@@ -9,12 +9,10 @@ namespace gfx
using namespace Slang;
-namespace metal
+namespace metal
{
-class CommandQueueImpl
- : public ICommandQueue
- , public ComObject
+class CommandQueueImpl : public ICommandQueue, public ComObject
{
public:
SLANG_COM_OBJECT_IUNKNOWN_ALL
@@ -42,8 +40,8 @@ public:
virtual SLANG_NO_THROW const Desc& SLANG_MCALL getDesc() override;
- virtual SLANG_NO_THROW Result SLANG_MCALL waitForFenceValuesOnDevice(
- GfxCount fenceCount, IFence** fences, uint64_t* waitValues) override;
+ virtual SLANG_NO_THROW Result SLANG_MCALL
+ waitForFenceValuesOnDevice(GfxCount fenceCount, IFence** fences, uint64_t* waitValues) override;
void queueSubmitImpl(
uint32_t count,
diff --git a/tools/gfx/metal/metal-device.cpp b/tools/gfx/metal/metal-device.cpp
index 609c1bf27..ff534a78c 100644
--- a/tools/gfx/metal/metal-device.cpp
+++ b/tools/gfx/metal/metal-device.cpp
@@ -1,25 +1,25 @@
// metal-device.cpp
#include "metal-device.h"
-#include "metal-swap-chain.h"
-#include "metal-util.h"
#include "../resource-desc-utils.h"
-#include "metal-texture.h"
+#include "metal-buffer.h"
#include "metal-render-pass.h"
-#include "metal-vertex-layout.h"
#include "metal-shader-program.h"
-#include "metal-buffer.h"
-//#include "metal-command-queue.h"
+#include "metal-swap-chain.h"
+#include "metal-texture.h"
+#include "metal-util.h"
+#include "metal-vertex-layout.h"
+// #include "metal-command-queue.h"
#include "metal-fence.h"
#include "metal-query.h"
-//#include "metal-resource-views.h"
+// #include "metal-resource-views.h"
#include "metal-sampler.h"
-#include "metal-shader-object.h"
#include "metal-shader-object-layout.h"
-//#include "metal-shader-table.h"
+#include "metal-shader-object.h"
+// #include "metal-shader-table.h"
#include "metal-transient-heap.h"
-//#include "metal-pipeline-dump-layer.h"
-//#include "metal-helper-functions.h"
+// #include "metal-pipeline-dump-layer.h"
+// #include "metal-helper-functions.h"
#include "source/core/slang-platform.h"
namespace gfx
@@ -37,9 +37,7 @@ static bool shouldDumpPipeline()
return dumpPipelineSettings.produceString() == "1";
}
-DeviceImpl::~DeviceImpl()
-{
-}
+DeviceImpl::~DeviceImpl() {}
Result DeviceImpl::getNativeDeviceHandles(InteropHandles* outHandles)
{
@@ -59,7 +57,7 @@ SlangResult DeviceImpl::initialize(const Desc& desc)
m_info.projectionStyle = ProjectionStyle::Metal;
m_info.deviceType = DeviceType::Metal;
m_info.adapterName = "default";
- static const float kIdentity[] = { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 };
+ static const float kIdentity[] = {1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1};
::memcpy(m_info.identityProjectionMatrix, kIdentity, sizeof(kIdentity));
}
@@ -83,23 +81,27 @@ SlangResult DeviceImpl::initialize(const Desc& desc)
desc.extendedDescs,
SLANG_METAL_LIB,
"",
- makeArray(slang::PreprocessorMacroDesc{ "__METAL__", "1" }).getView()));
+ makeArray(slang::PreprocessorMacroDesc{"__METAL__", "1"}).getView()));
// TODO: expose via some other means
if (captureEnabled())
{
MTL::CaptureManager* captureManager = MTL::CaptureManager::sharedCaptureManager();
MTL::CaptureDescriptor* d = MTL::CaptureDescriptor::alloc()->init();
- MTL::CaptureDestination captureDest = MTL::CaptureDestination::CaptureDestinationGPUTraceDocument;
+ MTL::CaptureDestination captureDest =
+ MTL::CaptureDestination::CaptureDestinationGPUTraceDocument;
if (!captureManager->supportsDestination(MTL::CaptureDestinationGPUTraceDocument))
{
- std::cout << "Cannot capture MTL calls to document; ensure that Info.plist exists with 'MetalCaptureEnabled' set to 'true'." << std::endl;
+ std::cout << "Cannot capture MTL calls to document; ensure that Info.plist exists with "
+ "'MetalCaptureEnabled' set to 'true'."
+ << std::endl;
exit(1);
}
d->setDestination(MTL::CaptureDestinationGPUTraceDocument);
d->setCaptureObject(m_device.get());
NS::SharedPtr<NS::String> path = MetalUtil::createString("frame.gputrace");
- NS::SharedPtr<NS::URL> url = NS::TransferPtr(NS::URL::alloc()->initFileURLWithPath(path.get()));
+ NS::SharedPtr<NS::URL> url =
+ NS::TransferPtr(NS::URL::alloc()->initFileURLWithPath(path.get()));
d->setOutputURL(url.get());
NS::Error* errorCode = NS::Error::alloc();
if (!captureManager->startCapture(d, &errorCode))
@@ -113,7 +115,7 @@ SlangResult DeviceImpl::initialize(const Desc& desc)
return SLANG_OK;
}
-//void DeviceImpl::waitForGpu() { m_deviceQueue.flushAndWait(); }
+// void DeviceImpl::waitForGpu() { m_deviceQueue.flushAndWait(); }
const DeviceInfo& DeviceImpl::getDeviceInfo() const
@@ -121,7 +123,9 @@ const DeviceInfo& DeviceImpl::getDeviceInfo() const
return m_info;
}
-Result DeviceImpl::createTransientResourceHeap(const ITransientResourceHeap::Desc& desc, ITransientResourceHeap** outHeap)
+Result DeviceImpl::createTransientResourceHeap(
+ const ITransientResourceHeap::Desc& desc,
+ ITransientResourceHeap** outHeap)
{
AUTORELEASEPOOL
@@ -146,7 +150,9 @@ Result DeviceImpl::createCommandQueue(const ICommandQueue::Desc& desc, ICommandQ
}
Result DeviceImpl::createSwapchain(
- const ISwapchain::Desc& desc, WindowHandle window, ISwapchain** outSwapchain)
+ const ISwapchain::Desc& desc,
+ WindowHandle window,
+ ISwapchain** outSwapchain)
{
AUTORELEASEPOOL
@@ -156,7 +162,9 @@ Result DeviceImpl::createSwapchain(
return SLANG_OK;
}
-Result DeviceImpl::createFramebufferLayout(const IFramebufferLayout::Desc& desc, IFramebufferLayout** outLayout)
+Result DeviceImpl::createFramebufferLayout(
+ const IFramebufferLayout::Desc& desc,
+ IFramebufferLayout** outLayout)
{
AUTORELEASEPOOL
@@ -166,7 +174,9 @@ Result DeviceImpl::createFramebufferLayout(const IFramebufferLayout::Desc& desc,
return SLANG_OK;
}
-Result DeviceImpl::createRenderPassLayout(const IRenderPassLayout::Desc& desc, IRenderPassLayout** outRenderPassLayout)
+Result DeviceImpl::createRenderPassLayout(
+ const IRenderPassLayout::Desc& desc,
+ IRenderPassLayout** outRenderPassLayout)
{
AUTORELEASEPOOL
@@ -199,7 +209,7 @@ SlangResult DeviceImpl::readTextureResource(
if (textureImpl->getDesc()->sampleDesc.numSamples > 1)
{
- return SLANG_E_NOT_IMPLEMENTED;
+ return SLANG_E_NOT_IMPLEMENTED;
}
NS::SharedPtr<MTL::Texture> srcTexture = textureImpl->m_texture;
@@ -220,7 +230,8 @@ SlangResult DeviceImpl::readTextureResource(
*outPixelSize = bytesPerPixel;
// create staging buffer
- NS::SharedPtr<MTL::Buffer> stagingBuffer = NS::TransferPtr(m_device->newBuffer(bufferSize, MTL::StorageModeShared));
+ NS::SharedPtr<MTL::Buffer> stagingBuffer =
+ NS::TransferPtr(m_device->newBuffer(bufferSize, MTL::StorageModeShared));
if (!stagingBuffer)
{
return SLANG_FAIL;
@@ -229,8 +240,15 @@ SlangResult DeviceImpl::readTextureResource(
MTL::CommandBuffer* commandBuffer = m_commandQueue->commandBuffer();
MTL::BlitCommandEncoder* encoder = commandBuffer->blitCommandEncoder();
encoder->copyFromTexture(
- srcTexture.get(), 0, 0, MTL::Origin(0, 0, 0), MTL::Size(width, height, depth),
- stagingBuffer.get(), 0, bytesPerRow, bytesPerSlice);
+ srcTexture.get(),
+ 0,
+ 0,
+ MTL::Origin(0, 0, 0),
+ MTL::Size(width, height, depth),
+ stagingBuffer.get(),
+ 0,
+ bytesPerRow,
+ bytesPerSlice);
encoder->endEncoding();
commandBuffer->commit();
commandBuffer->waitUntilCompleted();
@@ -245,12 +263,16 @@ SlangResult DeviceImpl::readTextureResource(
}
SlangResult DeviceImpl::readBufferResource(
- IBufferResource* buffer, Offset offset, Size size, ISlangBlob** outBlob)
+ IBufferResource* buffer,
+ Offset offset,
+ Size size,
+ ISlangBlob** outBlob)
{
AUTORELEASEPOOL
// create staging buffer
- NS::SharedPtr<MTL::Buffer> stagingBuffer = NS::TransferPtr(m_device->newBuffer(size, MTL::StorageModeShared));
+ NS::SharedPtr<MTL::Buffer> stagingBuffer =
+ NS::TransferPtr(m_device->newBuffer(size, MTL::StorageModeShared));
if (!stagingBuffer)
{
return SLANG_FAIL;
@@ -258,7 +280,12 @@ SlangResult DeviceImpl::readBufferResource(
MTL::CommandBuffer* commandBuffer = m_commandQueue->commandBuffer();
MTL::BlitCommandEncoder* blitEncoder = commandBuffer->blitCommandEncoder();
- blitEncoder->copyFromBuffer(static_cast<BufferResourceImpl*>(buffer)->m_buffer.get(), offset, stagingBuffer.get(), 0, size);
+ blitEncoder->copyFromBuffer(
+ static_cast<BufferResourceImpl*>(buffer)->m_buffer.get(),
+ offset,
+ stagingBuffer.get(),
+ 0,
+ size);
blitEncoder->endEncoding();
commandBuffer->commit();
commandBuffer->waitUntilCompleted();
@@ -282,7 +309,8 @@ Result DeviceImpl::getAccelerationStructurePrebuildInfo(
}
Result DeviceImpl::createAccelerationStructure(
- const IAccelerationStructure::CreateDesc& desc, IAccelerationStructure** outAS)
+ const IAccelerationStructure::CreateDesc& desc,
+ IAccelerationStructure** outAS)
{
AUTORELEASEPOOL
@@ -290,13 +318,14 @@ Result DeviceImpl::createAccelerationStructure(
}
Result DeviceImpl::getTextureAllocationInfo(
- const ITextureResource::Desc& descIn, Size* outSize, Size* outAlignment)
+ const ITextureResource::Desc& descIn,
+ Size* outSize,
+ Size* outAlignment)
{
AUTORELEASEPOOL
- auto alignTo = [&](Size size, Size alignment) -> Size {
- return ((size + alignment - 1) / alignment) * alignment;
- };
+ auto alignTo = [&](Size size, Size alignment) -> Size
+ { return ((size + alignment - 1) / alignment) * alignment; };
TextureResource::Desc desc = fixupTextureDesc(descIn);
FormatInfo formatInfo;
@@ -311,7 +340,8 @@ Result DeviceImpl::getTextureAllocationInfo(
for (Int i = 0; i < desc.numMipLevels; ++i)
{
- Size rowSize = ((extents.width + formatInfo.blockWidth - 1) / formatInfo.blockWidth) * formatInfo.blockSizeInBytes;
+ Size rowSize = ((extents.width + formatInfo.blockWidth - 1) / formatInfo.blockWidth) *
+ formatInfo.blockSizeInBytes;
rowSize = alignTo(rowSize, alignment);
Size sliceSize = rowSize * alignTo(extents.height, formatInfo.blockHeight);
size += sliceSize * extents.depth;
@@ -358,19 +388,16 @@ Result DeviceImpl::createTextureResource(
RefPtr<TextureResourceImpl> textureImpl(new TextureResourceImpl(desc, this));
- NS::SharedPtr<MTL::TextureDescriptor> textureDesc = NS::TransferPtr(MTL::TextureDescriptor::alloc()->init());
+ NS::SharedPtr<MTL::TextureDescriptor> textureDesc =
+ NS::TransferPtr(MTL::TextureDescriptor::alloc()->init());
switch (desc.memoryType)
{
- case MemoryType::DeviceLocal:
- textureDesc->setStorageMode(MTL::StorageModePrivate);
- break;
+ case MemoryType::DeviceLocal: textureDesc->setStorageMode(MTL::StorageModePrivate); break;
case MemoryType::Upload:
textureDesc->setStorageMode(MTL::StorageModeShared);
textureDesc->setCpuCacheMode(MTL::CPUCacheModeWriteCombined);
break;
- case MemoryType::ReadBack:
- textureDesc->setStorageMode(MTL::StorageModeShared);
- break;
+ case MemoryType::ReadBack: textureDesc->setStorageMode(MTL::StorageModeShared); break;
}
bool isArray = desc.arraySize > 0;
@@ -384,7 +411,8 @@ Result DeviceImpl::createTextureResource(
case IResource::Type::Texture2D:
if (desc.sampleDesc.numSamples > 1)
{
- textureDesc->setTextureType(isArray ? MTL::TextureType2DMultisampleArray : MTL::TextureType2DMultisample);
+ textureDesc->setTextureType(
+ isArray ? MTL::TextureType2DMultisampleArray : MTL::TextureType2DMultisample);
textureDesc->setSampleCount(desc.sampleDesc.numSamples);
}
else
@@ -405,9 +433,7 @@ Result DeviceImpl::createTextureResource(
textureDesc->setHeight(descIn.size.height);
textureDesc->setDepth(descIn.size.depth);
break;
- default:
- assert("!Unsupported texture type");
- return SLANG_FAIL;
+ default: assert("!Unsupported texture type"); return SLANG_FAIL;
}
MTL::TextureUsage textureUsage = MTL::TextureUsageUnknown;
@@ -430,9 +456,7 @@ Result DeviceImpl::createTextureResource(
case Format::R32_UINT:
case Format::R32_SINT:
case Format::R32G32_UINT:
- case Format::R32G32_SINT:
- textureUsage |= MTL::TextureUsageShaderAtomic;
- break;
+ case Format::R32G32_SINT: textureUsage |= MTL::TextureUsageShaderAtomic; break;
}
}
@@ -456,7 +480,8 @@ Result DeviceImpl::createTextureResource(
{
textureDesc->setStorageMode(MTL::StorageModeManaged);
textureDesc->setCpuCacheMode(MTL::CPUCacheModeDefaultCache);
- NS::SharedPtr<MTL::Texture> stagingTexture = NS::TransferPtr(m_device->newTexture(textureDesc.get()));
+ NS::SharedPtr<MTL::Texture> stagingTexture =
+ NS::TransferPtr(m_device->newTexture(textureDesc.get()));
MTL::CommandBuffer* commandBuffer = m_commandQueue->commandBuffer();
MTL::BlitCommandEncoder* encoder = commandBuffer->blitCommandEncoder();
@@ -480,12 +505,22 @@ Result DeviceImpl::createTextureResource(
{
if (level >= desc.numMipLevels)
continue;
- const ITextureResource::SubresourceData& subresourceData = initData[slice * initMipLevels + level];
- stagingTexture->replaceRegion(region, level, slice, subresourceData.data, subresourceData.strideY, subresourceData.strideZ);
+ const ITextureResource::SubresourceData& subresourceData =
+ initData[slice * initMipLevels + level];
+ stagingTexture->replaceRegion(
+ region,
+ level,
+ slice,
+ subresourceData.data,
+ subresourceData.strideY,
+ subresourceData.strideZ);
encoder->synchronizeTexture(stagingTexture.get(), slice, level);
- region.size.width = region.size.width > 0 ? Math::Max(1ul, region.size.width >> 1) : 0;
- region.size.height = region.size.height > 0 ? Math::Max(1ul, region.size.height >> 1) : 0;
- region.size.depth = region.size.depth > 0 ? Math::Max(1ul, region.size.depth >> 1) : 0;
+ region.size.width =
+ region.size.width > 0 ? Math::Max(1ul, region.size.width >> 1) : 0;
+ region.size.height =
+ region.size.height > 0 ? Math::Max(1ul, region.size.height >> 1) : 0;
+ region.size.depth =
+ region.size.depth > 0 ? Math::Max(1ul, region.size.depth >> 1) : 0;
}
}
@@ -500,7 +535,9 @@ Result DeviceImpl::createTextureResource(
}
Result DeviceImpl::createBufferResource(
- const IBufferResource::Desc& descIn, const void* initData, IBufferResource** outResource)
+ const IBufferResource::Desc& descIn,
+ const void* initData,
+ IBufferResource** outResource)
{
AUTORELEASEPOOL
@@ -511,17 +548,15 @@ Result DeviceImpl::createBufferResource(
MTL::ResourceOptions resourceOptions = MTL::ResourceOptions(0);
switch (desc.memoryType)
{
- case MemoryType::DeviceLocal:
- resourceOptions = MTL::ResourceStorageModePrivate;
- break;
+ case MemoryType::DeviceLocal: resourceOptions = MTL::ResourceStorageModePrivate; break;
case MemoryType::Upload:
resourceOptions = MTL::ResourceStorageModeShared | MTL::CPUCacheModeWriteCombined;
break;
- case MemoryType::ReadBack:
- resourceOptions = MTL::ResourceStorageModeShared;
- break;
+ case MemoryType::ReadBack: resourceOptions = MTL::ResourceStorageModeShared; break;
}
- resourceOptions |= (desc.memoryType == MemoryType::DeviceLocal) ? MTL::ResourceStorageModePrivate : MTL::ResourceStorageModeShared;
+ resourceOptions |= (desc.memoryType == MemoryType::DeviceLocal)
+ ? MTL::ResourceStorageModePrivate
+ : MTL::ResourceStorageModeShared;
RefPtr<BufferResourceImpl> bufferImpl(new BufferResourceImpl(desc, this));
bufferImpl->m_buffer = NS::TransferPtr(m_device->newBuffer(bufferSize, resourceOptions));
@@ -533,7 +568,9 @@ Result DeviceImpl::createBufferResource(
if (initData)
{
NS::SharedPtr<MTL::Buffer> stagingBuffer = NS::TransferPtr(m_device->newBuffer(
- initData, bufferSize, MTL::ResourceStorageModeShared | MTL::CPUCacheModeWriteCombined));
+ initData,
+ bufferSize,
+ MTL::ResourceStorageModeShared | MTL::CPUCacheModeWriteCombined));
MTL::CommandBuffer* commandBuffer = m_commandQueue->commandBuffer();
MTL::BlitCommandEncoder* encoder = commandBuffer->blitCommandEncoder();
if (!stagingBuffer || !commandBuffer || !encoder)
@@ -551,7 +588,9 @@ Result DeviceImpl::createBufferResource(
}
Result DeviceImpl::createBufferFromNativeHandle(
- InteropHandle handle, const IBufferResource::Desc& srcDesc, IBufferResource** outResource)
+ InteropHandle handle,
+ const IBufferResource::Desc& srcDesc,
+ IBufferResource** outResource)
{
AUTORELEASEPOOL
@@ -569,7 +608,9 @@ Result DeviceImpl::createSamplerState(ISamplerState::Desc const& desc, ISamplerS
}
Result DeviceImpl::createTextureView(
- ITextureResource* texture, IResourceView::Desc const& desc, IResourceView** outView)
+ ITextureResource* texture,
+ IResourceView::Desc const& desc,
+ IResourceView** outView)
{
AUTORELEASEPOOL
@@ -586,7 +627,8 @@ Result DeviceImpl::createTextureView(
const ITextureResource::Desc& textureDesc = *textureImpl->getDesc();
SubresourceRange sr = desc.subresourceRange;
- sr.mipLevelCount = sr.mipLevelCount == 0 ? textureDesc.numMipLevels - sr.mipLevel : sr.mipLevelCount;
+ sr.mipLevelCount =
+ sr.mipLevelCount == 0 ? textureDesc.numMipLevels - sr.mipLevel : sr.mipLevelCount;
sr.layerCount = sr.layerCount == 0 ? textureDesc.arraySize - sr.baseArrayLayer : sr.layerCount;
if (sr.mipLevel == 0 && sr.mipLevelCount == textureDesc.numMipLevels &&
sr.baseArrayLayer == 0 && sr.layerCount == textureDesc.arraySize)
@@ -596,11 +638,17 @@ Result DeviceImpl::createTextureView(
return SLANG_OK;
}
- MTL::PixelFormat pixelFormat = desc.format == Format::Unknown ? textureImpl->m_pixelFormat : MetalUtil::translatePixelFormat(desc.format);
+ MTL::PixelFormat pixelFormat = desc.format == Format::Unknown
+ ? textureImpl->m_pixelFormat
+ : MetalUtil::translatePixelFormat(desc.format);
NS::Range levelRange(sr.baseArrayLayer, sr.layerCount);
NS::Range sliceRange(sr.mipLevel, sr.mipLevelCount);
- viewImpl->m_textureView = NS::TransferPtr(textureImpl->m_texture->newTextureView(pixelFormat, textureImpl->m_textureType, levelRange, sliceRange));
+ viewImpl->m_textureView = NS::TransferPtr(textureImpl->m_texture->newTextureView(
+ pixelFormat,
+ textureImpl->m_textureType,
+ levelRange,
+ sliceRange));
if (!viewImpl->m_textureView)
{
return SLANG_FAIL;
@@ -651,7 +699,8 @@ Result DeviceImpl::createBufferView(
return SLANG_FAIL;
}
- if (desc.type != IResourceView::Type::UnorderedAccess && desc.type != IResourceView::Type::ShaderResource)
+ if (desc.type != IResourceView::Type::UnorderedAccess &&
+ desc.type != IResourceView::Type::ShaderResource)
{
return SLANG_FAIL;
}
@@ -662,7 +711,8 @@ Result DeviceImpl::createBufferView(
viewImpl->m_desc = desc;
viewImpl->m_buffer = bufferImpl;
viewImpl->m_offset = desc.bufferRange.offset;
- viewImpl->m_size = desc.bufferRange.size == 0 ? bufferImpl->getDesc()->sizeInBytes : desc.bufferRange.size;
+ viewImpl->m_size =
+ desc.bufferRange.size == 0 ? bufferImpl->getDesc()->sizeInBytes : desc.bufferRange.size;
returnComPtr(outView, viewImpl);
return SLANG_OK;
}
@@ -678,7 +728,9 @@ Result DeviceImpl::createInputLayout(IInputLayout::Desc const& desc, IInputLayou
}
Result DeviceImpl::createProgram(
- const IShaderProgram::Desc& desc, IShaderProgram** outProgram, ISlangBlob** outDiagnosticBlob)
+ const IShaderProgram::Desc& desc,
+ IShaderProgram** outProgram,
+ ISlangBlob** outDiagnosticBlob)
{
AUTORELEASEPOOL
@@ -708,8 +760,8 @@ Result DeviceImpl::createShaderObjectLayout(
AUTORELEASEPOOL
RefPtr<ShaderObjectLayoutImpl> layout;
- SLANG_RETURN_ON_FAIL(ShaderObjectLayoutImpl::createForElementType(
- this, session, typeLayout, layout.writeRef()));
+ SLANG_RETURN_ON_FAIL(
+ ShaderObjectLayoutImpl::createForElementType(this, session, typeLayout, layout.writeRef()));
returnRefPtrMove(outLayout, layout);
return SLANG_OK;
}
@@ -719,14 +771,17 @@ Result DeviceImpl::createShaderObject(ShaderObjectLayoutBase* layout, IShaderObj
AUTORELEASEPOOL
RefPtr<ShaderObjectImpl> shaderObject;
- SLANG_RETURN_ON_FAIL(ShaderObjectImpl::create(this,
- static_cast<ShaderObjectLayoutImpl*>(layout), shaderObject.writeRef()));
+ SLANG_RETURN_ON_FAIL(ShaderObjectImpl::create(
+ this,
+ static_cast<ShaderObjectLayoutImpl*>(layout),
+ shaderObject.writeRef()));
returnComPtr(outObject, shaderObject);
return SLANG_OK;
}
Result DeviceImpl::createMutableShaderObject(
- ShaderObjectLayoutBase* layout, IShaderObject** outObject)
+ ShaderObjectLayoutBase* layout,
+ IShaderObject** outObject)
{
AUTORELEASEPOOL
@@ -747,7 +802,9 @@ Result DeviceImpl::createShaderTable(const IShaderTable::Desc& desc, IShaderTabl
return SLANG_E_NOT_IMPLEMENTED;
}
-Result DeviceImpl::createGraphicsPipelineState(const GraphicsPipelineStateDesc& desc, IPipelineState** outState)
+Result DeviceImpl::createGraphicsPipelineState(
+ const GraphicsPipelineStateDesc& desc,
+ IPipelineState** outState)
{
AUTORELEASEPOOL
@@ -757,7 +814,9 @@ Result DeviceImpl::createGraphicsPipelineState(const GraphicsPipelineStateDesc&
return SLANG_OK;
}
-Result DeviceImpl::createComputePipelineState(const ComputePipelineStateDesc& desc, IPipelineState** outState)
+Result DeviceImpl::createComputePipelineState(
+ const ComputePipelineStateDesc& desc,
+ IPipelineState** outState)
{
AUTORELEASEPOOL
@@ -768,7 +827,9 @@ Result DeviceImpl::createComputePipelineState(const ComputePipelineStateDesc& de
return SLANG_OK;
}
-Result DeviceImpl::createRayTracingPipelineState(const RayTracingPipelineStateDesc& desc, IPipelineState** outState)
+Result DeviceImpl::createRayTracingPipelineState(
+ const RayTracingPipelineStateDesc& desc,
+ IPipelineState** outState)
{
AUTORELEASEPOOL
@@ -796,7 +857,11 @@ Result DeviceImpl::createFence(const IFence::Desc& desc, IFence** outFence)
}
Result DeviceImpl::waitForFences(
- GfxCount fenceCount, IFence** fences, uint64_t* fenceValues, bool waitForAll, uint64_t timeout)
+ GfxCount fenceCount,
+ IFence** fences,
+ uint64_t* fenceValues,
+ bool waitForAll,
+ uint64_t timeout)
{
return SLANG_E_NOT_IMPLEMENTED;
}
diff --git a/tools/gfx/metal/metal-device.h b/tools/gfx/metal/metal-device.h
index 50eb0e88d..b22066f61 100644
--- a/tools/gfx/metal/metal-device.h
+++ b/tools/gfx/metal/metal-device.h
@@ -1,9 +1,9 @@
// metal-device.h
#pragma once
+#include "../simple-transient-resource-heap.h"
#include "metal-base.h"
#include "metal-device.h"
-#include "../simple-transient-resource-heap.h"
#include "metal-framebuffer.h"
namespace gfx
@@ -11,7 +11,7 @@ namespace gfx
using namespace Slang;
-namespace metal
+namespace metal
{
class DeviceImpl : public RendererBase
@@ -20,19 +20,24 @@ public:
// Renderer implementation
virtual SLANG_NO_THROW Result SLANG_MCALL initialize(const Desc& desc) override;
virtual SLANG_NO_THROW Result SLANG_MCALL
- getFormatSupportedResourceStates(Format format, ResourceStateSet* outStates) override;
+ getFormatSupportedResourceStates(Format format, ResourceStateSet* outStates) override;
virtual SLANG_NO_THROW Result SLANG_MCALL createTransientResourceHeap(
- const ITransientResourceHeap::Desc& desc, ITransientResourceHeap** outHeap) override;
+ const ITransientResourceHeap::Desc& desc,
+ ITransientResourceHeap** outHeap) override;
virtual SLANG_NO_THROW Result SLANG_MCALL
- createCommandQueue(const ICommandQueue::Desc& desc, ICommandQueue** outQueue) override;
+ createCommandQueue(const ICommandQueue::Desc& desc, ICommandQueue** outQueue) override;
virtual SLANG_NO_THROW Result SLANG_MCALL createSwapchain(
- const ISwapchain::Desc& desc, WindowHandle window, ISwapchain** outSwapchain) override;
+ const ISwapchain::Desc& desc,
+ WindowHandle window,
+ ISwapchain** outSwapchain) override;
virtual SLANG_NO_THROW Result SLANG_MCALL createFramebufferLayout(
- const IFramebufferLayout::Desc& desc, IFramebufferLayout** outLayout) override;
+ const IFramebufferLayout::Desc& desc,
+ IFramebufferLayout** outLayout) override;
virtual SLANG_NO_THROW Result SLANG_MCALL
- createFramebuffer(const IFramebuffer::Desc& desc, IFramebuffer** outFramebuffer) override;
+ createFramebuffer(const IFramebuffer::Desc& desc, IFramebuffer** outFramebuffer) override;
virtual SLANG_NO_THROW Result SLANG_MCALL createRenderPassLayout(
- const IRenderPassLayout::Desc& desc, IRenderPassLayout** outRenderPassLayout) override;
+ const IRenderPassLayout::Desc& desc,
+ IRenderPassLayout** outRenderPassLayout) override;
virtual SLANG_NO_THROW Result SLANG_MCALL createTextureResource(
const ITextureResource::Desc& desc,
const ITextureResource::SubresourceData* initData,
@@ -46,7 +51,7 @@ public:
const IBufferResource::Desc& srcDesc,
IBufferResource** outResource) override;
virtual SLANG_NO_THROW Result SLANG_MCALL
- createSamplerState(ISamplerState::Desc const& desc, ISamplerState** outSampler) override;
+ createSamplerState(ISamplerState::Desc const& desc, ISamplerState** outSampler) override;
virtual SLANG_NO_THROW Result SLANG_MCALL createTextureView(
ITextureResource* texture,
@@ -59,33 +64,37 @@ public:
IResourceView** outView) override;
virtual SLANG_NO_THROW Result SLANG_MCALL
- createInputLayout(IInputLayout::Desc const& desc, IInputLayout** outLayout) override;
+ createInputLayout(IInputLayout::Desc const& desc, IInputLayout** outLayout) override;
virtual Result createShaderObjectLayout(
slang::ISession* session,
slang::TypeLayoutReflection* typeLayout,
ShaderObjectLayoutBase** outLayout) override;
- virtual Result createShaderObject(
- ShaderObjectLayoutBase* layout, IShaderObject** outObject) override;
+ virtual Result createShaderObject(ShaderObjectLayoutBase* layout, IShaderObject** outObject)
+ override;
virtual Result createMutableShaderObject(
- ShaderObjectLayoutBase* layout, IShaderObject** outObject) override;
+ ShaderObjectLayoutBase* layout,
+ IShaderObject** outObject) override;
virtual SLANG_NO_THROW Result SLANG_MCALL
- createMutableRootShaderObject(IShaderProgram* program, IShaderObject** outObject) override;
+ createMutableRootShaderObject(IShaderProgram* program, IShaderObject** outObject) override;
virtual SLANG_NO_THROW Result SLANG_MCALL
- createShaderTable(const IShaderTable::Desc& desc, IShaderTable** outShaderTable) override;
+ createShaderTable(const IShaderTable::Desc& desc, IShaderTable** outShaderTable) override;
virtual SLANG_NO_THROW Result SLANG_MCALL createProgram(
const IShaderProgram::Desc& desc,
IShaderProgram** outProgram,
ISlangBlob** outDiagnosticBlob) override;
virtual SLANG_NO_THROW Result SLANG_MCALL createGraphicsPipelineState(
- const GraphicsPipelineStateDesc& desc, IPipelineState** outState) override;
+ const GraphicsPipelineStateDesc& desc,
+ IPipelineState** outState) override;
virtual SLANG_NO_THROW Result SLANG_MCALL createComputePipelineState(
- const ComputePipelineStateDesc& desc, IPipelineState** outState) override;
+ const ComputePipelineStateDesc& desc,
+ IPipelineState** outState) override;
virtual SLANG_NO_THROW Result SLANG_MCALL createRayTracingPipelineState(
- const RayTracingPipelineStateDesc& desc, IPipelineState** outState) override;
+ const RayTracingPipelineStateDesc& desc,
+ IPipelineState** outState) override;
virtual SLANG_NO_THROW Result SLANG_MCALL
- createQueryPool(const IQueryPool::Desc& desc, IQueryPool** outPool) override;
+ createQueryPool(const IQueryPool::Desc& desc, IQueryPool** outPool) override;
virtual SLANG_NO_THROW SlangResult SLANG_MCALL readTextureResource(
ITextureResource* texture,
@@ -95,22 +104,28 @@ public:
Size* outPixelSize) override;
virtual SLANG_NO_THROW SlangResult SLANG_MCALL readBufferResource(
- IBufferResource* buffer, Offset offset, Size size, ISlangBlob** outBlob) override;
+ IBufferResource* buffer,
+ Offset offset,
+ Size size,
+ ISlangBlob** outBlob) override;
virtual SLANG_NO_THROW Result SLANG_MCALL getAccelerationStructurePrebuildInfo(
const IAccelerationStructure::BuildInputs& buildInputs,
IAccelerationStructure::PrebuildInfo* outPrebuildInfo) override;
virtual SLANG_NO_THROW Result SLANG_MCALL createAccelerationStructure(
- const IAccelerationStructure::CreateDesc& desc, IAccelerationStructure** outView) override;
+ const IAccelerationStructure::CreateDesc& desc,
+ IAccelerationStructure** outView) override;
virtual SLANG_NO_THROW Result SLANG_MCALL getTextureAllocationInfo(
- const ITextureResource::Desc& desc, Size* outSize, Size* outAlignment) override;
+ const ITextureResource::Desc& desc,
+ Size* outSize,
+ Size* outAlignment) override;
virtual SLANG_NO_THROW Result SLANG_MCALL getTextureRowAlignment(Size* outAlignment) override;
virtual SLANG_NO_THROW Result SLANG_MCALL
- createFence(const IFence::Desc& desc, IFence** outFence) override;
+ createFence(const IFence::Desc& desc, IFence** outFence) override;
virtual SLANG_NO_THROW Result SLANG_MCALL waitForFences(
GfxCount fenceCount,
@@ -119,10 +134,10 @@ public:
bool waitForAll,
uint64_t timeout) override;
- //void waitForGpu();
+ // void waitForGpu();
virtual SLANG_NO_THROW const DeviceInfo& SLANG_MCALL getDeviceInfo() const override;
virtual SLANG_NO_THROW Result SLANG_MCALL
- getNativeDeviceHandles(InteropHandles* outHandles) override;
+ getNativeDeviceHandles(InteropHandles* outHandles) override;
~DeviceImpl();
public:
diff --git a/tools/gfx/metal/metal-fence.cpp b/tools/gfx/metal/metal-fence.cpp
index a908a8493..0de7d8ffb 100644
--- a/tools/gfx/metal/metal-fence.cpp
+++ b/tools/gfx/metal/metal-fence.cpp
@@ -1,5 +1,6 @@
// metal-fence.cpp
#include "metal-fence.h"
+
#include "metal-device.h"
namespace gfx
@@ -10,9 +11,7 @@ using namespace Slang;
namespace metal
{
-FenceImpl::~FenceImpl()
-{
-}
+FenceImpl::~FenceImpl() {}
Result FenceImpl::init(DeviceImpl* device, const IFence::Desc& desc)
{
diff --git a/tools/gfx/metal/metal-fence.h b/tools/gfx/metal/metal-fence.h
index d8aed7dfe..434f2f65d 100644
--- a/tools/gfx/metal/metal-fence.h
+++ b/tools/gfx/metal/metal-fence.h
@@ -24,11 +24,12 @@ public:
virtual SLANG_NO_THROW Result SLANG_MCALL getCurrentValue(uint64_t* outValue) override;
virtual SLANG_NO_THROW Result SLANG_MCALL setCurrentValue(uint64_t value) override;
-
+
virtual SLANG_NO_THROW Result SLANG_MCALL getSharedHandle(InteropHandle* outHandle) override;
- virtual SLANG_NO_THROW Result SLANG_MCALL getNativeHandle(InteropHandle* outNativeHandle) override;
+ virtual SLANG_NO_THROW Result SLANG_MCALL
+ getNativeHandle(InteropHandle* outNativeHandle) override;
};
-} // namespace metal
+} // namespace metal
} // namespace gfx
diff --git a/tools/gfx/metal/metal-framebuffer.cpp b/tools/gfx/metal/metal-framebuffer.cpp
index 76e944b4a..e7d04a63a 100644
--- a/tools/gfx/metal/metal-framebuffer.cpp
+++ b/tools/gfx/metal/metal-framebuffer.cpp
@@ -1,8 +1,9 @@
// metal-framebuffer.cpp
#include "metal-framebuffer.h"
+
#include "metal-device.h"
-#include "metal-resource-views.h"
#include "metal-helper-functions.h"
+#include "metal-resource-views.h"
namespace gfx
{
@@ -39,7 +40,7 @@ Result FramebufferImpl::init(DeviceImpl* device, const IFramebuffer::Desc& desc)
m_renderTargetViews[i] = static_cast<TextureResourceViewImpl*>(desc.renderTargetViews[i]);
}
m_depthStencilView = static_cast<TextureResourceViewImpl*>(desc.depthStencilView);
-
+
// Determine framebuffer dimensions & sample count;
m_width = 1;
m_height = 1;
@@ -49,8 +50,11 @@ Result FramebufferImpl::init(DeviceImpl* device, const IFramebuffer::Desc& desc)
{
const ITextureResource::Desc* textureDesc = view->m_texture->getDesc();
const IResourceView::Desc* viewDesc = view->getViewDesc();
- m_width = Math::Max(1u, uint32_t(textureDesc->size.width >> viewDesc->subresourceRange.mipLevel));
- m_height = Math::Max(1u, uint32_t(textureDesc->size.height >> viewDesc->subresourceRange.mipLevel));
+ m_width =
+ Math::Max(1u, uint32_t(textureDesc->size.width >> viewDesc->subresourceRange.mipLevel));
+ m_height = Math::Max(
+ 1u,
+ uint32_t(textureDesc->size.height >> viewDesc->subresourceRange.mipLevel));
m_sampleCount = Math::Max(m_sampleCount, uint32_t(textureDesc->sampleDesc.numSamples));
return SLANG_OK;
};
diff --git a/tools/gfx/metal/metal-helper-functions.cpp b/tools/gfx/metal/metal-helper-functions.cpp
index 69c4327ad..dc528f8ce 100644
--- a/tools/gfx/metal/metal-helper-functions.cpp
+++ b/tools/gfx/metal/metal-helper-functions.cpp
@@ -1,5 +1,6 @@
// metal-helper-functions.cpp
#include "metal-helper-functions.h"
+
#include "metal-device.h"
#include "metal-util.h"
diff --git a/tools/gfx/metal/metal-pipeline-state.cpp b/tools/gfx/metal/metal-pipeline-state.cpp
index d8ca3f793..c2a9afaac 100644
--- a/tools/gfx/metal/metal-pipeline-state.cpp
+++ b/tools/gfx/metal/metal-pipeline-state.cpp
@@ -2,10 +2,10 @@
#include "metal-pipeline-state.h"
#include "metal-device.h"
-#include "metal-shader-program.h"
#include "metal-shader-object-layout.h"
-#include "metal-vertex-layout.h"
+#include "metal-shader-program.h"
#include "metal-util.h"
+#include "metal-vertex-layout.h"
namespace gfx
{
@@ -20,9 +20,7 @@ PipelineStateImpl::PipelineStateImpl(DeviceImpl* device)
{
}
-PipelineStateImpl::~PipelineStateImpl()
-{
-}
+PipelineStateImpl::~PipelineStateImpl() {}
void PipelineStateImpl::init(const GraphicsPipelineStateDesc& desc)
{
@@ -54,25 +52,22 @@ Result PipelineStateImpl::createMetalRenderPipelineState()
if (!programImpl)
return SLANG_FAIL;
- NS::SharedPtr<MTL::RenderPipelineDescriptor> pd = NS::TransferPtr(MTL::RenderPipelineDescriptor::alloc()->init());
+ NS::SharedPtr<MTL::RenderPipelineDescriptor> pd =
+ NS::TransferPtr(MTL::RenderPipelineDescriptor::alloc()->init());
for (const ShaderProgramImpl::Module& module : programImpl->m_modules)
{
auto functionName = MetalUtil::createString(module.entryPointName.getBuffer());
- NS::SharedPtr<MTL::Function> function = NS::TransferPtr(module.library->newFunction(functionName.get()));
+ NS::SharedPtr<MTL::Function> function =
+ NS::TransferPtr(module.library->newFunction(functionName.get()));
if (!function)
return SLANG_FAIL;
switch (module.stage)
{
- case SLANG_STAGE_VERTEX:
- pd->setVertexFunction(function.get());
- break;
- case SLANG_STAGE_FRAGMENT:
- pd->setFragmentFunction(function.get());
- break;
- default:
- return SLANG_FAIL;
+ case SLANG_STAGE_VERTEX: pd->setVertexFunction(function.get()); break;
+ case SLANG_STAGE_FRAGMENT: pd->setFragmentFunction(function.get()); break;
+ default: return SLANG_FAIL;
}
}
@@ -81,12 +76,15 @@ Result PipelineStateImpl::createMetalRenderPipelineState()
// The +1 is to account for a potential constant buffer at index 0.
m_vertexBufferOffset = programImpl->m_rootObjectLayout->getBufferCount() + 1;
auto inputLayoutImpl = static_cast<InputLayoutImpl*>(desc.graphics.inputLayout);
- NS::SharedPtr<MTL::VertexDescriptor> vertexDescriptor = inputLayoutImpl->createVertexDescriptor(m_vertexBufferOffset);
+ NS::SharedPtr<MTL::VertexDescriptor> vertexDescriptor =
+ inputLayoutImpl->createVertexDescriptor(m_vertexBufferOffset);
pd->setVertexDescriptor(vertexDescriptor.get());
- pd->setInputPrimitiveTopology(MetalUtil::translatePrimitiveTopologyClass(desc.graphics.primitiveType));
+ pd->setInputPrimitiveTopology(
+ MetalUtil::translatePrimitiveTopologyClass(desc.graphics.primitiveType));
// Set rasterization state
- auto framebufferLayoutImpl = static_cast<FramebufferLayoutImpl*>(desc.graphics.framebufferLayout);
+ auto framebufferLayoutImpl =
+ static_cast<FramebufferLayoutImpl*>(desc.graphics.framebufferLayout);
const auto& blend = desc.graphics.blend;
GfxCount sampleCount = 1;
@@ -96,26 +94,36 @@ Result PipelineStateImpl::createMetalRenderPipelineState()
for (Index i = 0; i < framebufferLayoutImpl->m_renderTargets.getCount(); ++i)
{
- const IFramebufferLayout::TargetLayout& targetLayout = framebufferLayoutImpl->m_renderTargets[i];
- MTL::RenderPipelineColorAttachmentDescriptor* colorAttachment = pd->colorAttachments()->object(i);
+ const IFramebufferLayout::TargetLayout& targetLayout =
+ framebufferLayoutImpl->m_renderTargets[i];
+ MTL::RenderPipelineColorAttachmentDescriptor* colorAttachment =
+ pd->colorAttachments()->object(i);
colorAttachment->setPixelFormat(MetalUtil::translatePixelFormat(targetLayout.format));
if (i < blend.targetCount)
{
const TargetBlendDesc& targetBlendDesc = blend.targets[i];
colorAttachment->setBlendingEnabled(targetBlendDesc.enableBlend);
- colorAttachment->setSourceRGBBlendFactor(MetalUtil::translateBlendFactor(targetBlendDesc.color.srcFactor));
- colorAttachment->setDestinationRGBBlendFactor(MetalUtil::translateBlendFactor(targetBlendDesc.color.dstFactor));
- colorAttachment->setRgbBlendOperation(MetalUtil::translateBlendOperation(targetBlendDesc.color.op));
- colorAttachment->setSourceAlphaBlendFactor(MetalUtil::translateBlendFactor(targetBlendDesc.alpha.srcFactor));
- colorAttachment->setDestinationAlphaBlendFactor(MetalUtil::translateBlendFactor(targetBlendDesc.alpha.dstFactor));
- colorAttachment->setAlphaBlendOperation(MetalUtil::translateBlendOperation(targetBlendDesc.alpha.op));
- colorAttachment->setWriteMask(MetalUtil::translateColorWriteMask(targetBlendDesc.writeMask));
+ colorAttachment->setSourceRGBBlendFactor(
+ MetalUtil::translateBlendFactor(targetBlendDesc.color.srcFactor));
+ colorAttachment->setDestinationRGBBlendFactor(
+ MetalUtil::translateBlendFactor(targetBlendDesc.color.dstFactor));
+ colorAttachment->setRgbBlendOperation(
+ MetalUtil::translateBlendOperation(targetBlendDesc.color.op));
+ colorAttachment->setSourceAlphaBlendFactor(
+ MetalUtil::translateBlendFactor(targetBlendDesc.alpha.srcFactor));
+ colorAttachment->setDestinationAlphaBlendFactor(
+ MetalUtil::translateBlendFactor(targetBlendDesc.alpha.dstFactor));
+ colorAttachment->setAlphaBlendOperation(
+ MetalUtil::translateBlendOperation(targetBlendDesc.alpha.op));
+ colorAttachment->setWriteMask(
+ MetalUtil::translateColorWriteMask(targetBlendDesc.writeMask));
}
sampleCount = Math::Max(sampleCount, targetLayout.sampleCount);
}
if (framebufferLayoutImpl->m_depthStencil.format != Format::Unknown)
{
- const IFramebufferLayout::TargetLayout& depthStencil = framebufferLayoutImpl->m_depthStencil;
+ const IFramebufferLayout::TargetLayout& depthStencil =
+ framebufferLayoutImpl->m_depthStencil;
MTL::PixelFormat pixelFormat = MetalUtil::translatePixelFormat(depthStencil.format);
if (MetalUtil::isDepthFormat(pixelFormat))
{
@@ -123,14 +131,16 @@ Result PipelineStateImpl::createMetalRenderPipelineState()
}
if (MetalUtil::isStencilFormat(pixelFormat))
{
- pd->setStencilAttachmentPixelFormat(MetalUtil::translatePixelFormat(depthStencil.format));
+ pd->setStencilAttachmentPixelFormat(
+ MetalUtil::translatePixelFormat(depthStencil.format));
}
}
pd->setRasterSampleCount(sampleCount);
-
+
NS::Error* error;
- m_renderPipelineState = NS::TransferPtr(m_device->m_device->newRenderPipelineState(pd.get(), &error));
+ m_renderPipelineState =
+ NS::TransferPtr(m_device->m_device->newRenderPipelineState(pd.get(), &error));
if (!m_renderPipelineState)
{
std::cout << error->localizedDescription()->utf8String() << std::endl;
@@ -138,34 +148,52 @@ Result PipelineStateImpl::createMetalRenderPipelineState()
}
// Create depth stencil state
- auto createStencilDesc = [](const DepthStencilOpDesc& desc, uint32_t readMask, uint32_t writeMask) -> NS::SharedPtr<MTL::StencilDescriptor>
+ auto createStencilDesc = [](const DepthStencilOpDesc& desc,
+ uint32_t readMask,
+ uint32_t writeMask) -> NS::SharedPtr<MTL::StencilDescriptor>
{
- NS::SharedPtr<MTL::StencilDescriptor> stencilDesc = NS::TransferPtr(MTL::StencilDescriptor::alloc()->init());
- stencilDesc->setStencilCompareFunction(MetalUtil::translateCompareFunction(desc.stencilFunc));
- stencilDesc->setStencilFailureOperation(MetalUtil::translateStencilOperation(desc.stencilFailOp));
- stencilDesc->setDepthFailureOperation(MetalUtil::translateStencilOperation(desc.stencilDepthFailOp));
- stencilDesc->setDepthStencilPassOperation(MetalUtil::translateStencilOperation(desc.stencilPassOp));
+ NS::SharedPtr<MTL::StencilDescriptor> stencilDesc =
+ NS::TransferPtr(MTL::StencilDescriptor::alloc()->init());
+ stencilDesc->setStencilCompareFunction(
+ MetalUtil::translateCompareFunction(desc.stencilFunc));
+ stencilDesc->setStencilFailureOperation(
+ MetalUtil::translateStencilOperation(desc.stencilFailOp));
+ stencilDesc->setDepthFailureOperation(
+ MetalUtil::translateStencilOperation(desc.stencilDepthFailOp));
+ stencilDesc->setDepthStencilPassOperation(
+ MetalUtil::translateStencilOperation(desc.stencilPassOp));
stencilDesc->setReadMask(readMask);
stencilDesc->setWriteMask(writeMask);
return stencilDesc;
};
const auto& depthStencil = desc.graphics.depthStencil;
- NS::SharedPtr<MTL::DepthStencilDescriptor> depthStencilDesc = NS::TransferPtr(MTL::DepthStencilDescriptor::alloc()->init());
- m_depthStencilState = NS::TransferPtr(m_device->m_device->newDepthStencilState(depthStencilDesc.get()));
+ NS::SharedPtr<MTL::DepthStencilDescriptor> depthStencilDesc =
+ NS::TransferPtr(MTL::DepthStencilDescriptor::alloc()->init());
+ m_depthStencilState =
+ NS::TransferPtr(m_device->m_device->newDepthStencilState(depthStencilDesc.get()));
if (!m_depthStencilState)
{
return SLANG_FAIL;
}
if (depthStencil.depthTestEnable)
{
- depthStencilDesc->setDepthCompareFunction(MetalUtil::translateCompareFunction(depthStencil.depthFunc));
+ depthStencilDesc->setDepthCompareFunction(
+ MetalUtil::translateCompareFunction(depthStencil.depthFunc));
}
depthStencilDesc->setDepthWriteEnabled(depthStencil.depthWriteEnable);
if (depthStencil.stencilEnable)
{
- depthStencilDesc->setFrontFaceStencil(createStencilDesc(depthStencil.frontFace, depthStencil.stencilReadMask, depthStencil.stencilWriteMask).get());
- depthStencilDesc->setBackFaceStencil(createStencilDesc(depthStencil.backFace, depthStencil.stencilReadMask, depthStencil.stencilWriteMask).get());
+ depthStencilDesc->setFrontFaceStencil(createStencilDesc(
+ depthStencil.frontFace,
+ depthStencil.stencilReadMask,
+ depthStencil.stencilWriteMask)
+ .get());
+ depthStencilDesc->setBackFaceStencil(createStencilDesc(
+ depthStencil.backFace,
+ depthStencil.stencilReadMask,
+ depthStencil.stencilWriteMask)
+ .get());
}
return SLANG_OK;
@@ -179,16 +207,20 @@ Result PipelineStateImpl::createMetalComputePipelineState()
const ShaderProgramImpl::Module& module = programImpl->m_modules[0];
auto functionName = MetalUtil::createString(module.entryPointName.getBuffer());
- NS::SharedPtr<MTL::Function> function = NS::TransferPtr(module.library->newFunction(functionName.get()));
+ NS::SharedPtr<MTL::Function> function =
+ NS::TransferPtr(module.library->newFunction(functionName.get()));
if (!function)
return SLANG_FAIL;
- NS::Error *error;
- m_computePipelineState = NS::TransferPtr(m_device->m_device->newComputePipelineState(function.get(), &error));
+ NS::Error* error;
+ m_computePipelineState =
+ NS::TransferPtr(m_device->m_device->newComputePipelineState(function.get(), &error));
// Query thread group size for use during dispatch.
SlangUInt threadGroupSize[3];
- programImpl->linkedProgram->getLayout()->getEntryPointByIndex(0)->getComputeThreadGroupSize(3, threadGroupSize);
+ programImpl->linkedProgram->getLayout()->getEntryPointByIndex(0)->getComputeThreadGroupSize(
+ 3,
+ threadGroupSize);
m_threadGroupSize = MTL::Size(threadGroupSize[0], threadGroupSize[1], threadGroupSize[2]);
return m_computePipelineState ? SLANG_OK : SLANG_FAIL;
@@ -197,16 +229,14 @@ Result PipelineStateImpl::createMetalComputePipelineState()
Result PipelineStateImpl::ensureAPIPipelineStateCreated()
{
AUTORELEASEPOOL
-
+
switch (desc.type)
{
case PipelineType::Compute:
return m_computePipelineState ? SLANG_OK : createMetalComputePipelineState();
case PipelineType::Graphics:
return m_renderPipelineState ? SLANG_OK : createMetalRenderPipelineState();
- default:
- SLANG_UNREACHABLE("Unknown pipeline type.");
- return SLANG_FAIL;
+ default: SLANG_UNREACHABLE("Unknown pipeline type."); return SLANG_FAIL;
}
return SLANG_OK;
}
@@ -229,7 +259,8 @@ SLANG_NO_THROW Result SLANG_MCALL PipelineStateImpl::getNativeHandle(InteropHand
RayTracingPipelineStateImpl::RayTracingPipelineStateImpl(DeviceImpl* device)
: PipelineStateImpl(device)
-{}
+{
+}
Result RayTracingPipelineStateImpl::ensureAPIPipelineStateCreated()
{
@@ -242,6 +273,5 @@ Result RayTracingPipelineStateImpl::getNativeHandle(InteropHandle* outHandle)
}
-
} // namespace metal
} // namespace gfx
diff --git a/tools/gfx/metal/metal-query.cpp b/tools/gfx/metal/metal-query.cpp
index 4e1d09d77..6075d5549 100644
--- a/tools/gfx/metal/metal-query.cpp
+++ b/tools/gfx/metal/metal-query.cpp
@@ -1,7 +1,7 @@
// metal-query.cpp
#include "metal-query.h"
-//#include "metal-util.h"
+// #include "metal-util.h"
namespace gfx
{
@@ -11,9 +11,7 @@ using namespace Slang;
namespace metal
{
-QueryPoolImpl::~QueryPoolImpl()
-{
-}
+QueryPoolImpl::~QueryPoolImpl() {}
static MTL::CounterSet* findCounterSet(MTL::Device* device, QueryType queryType)
{
@@ -26,7 +24,8 @@ static MTL::CounterSet* findCounterSet(MTL::Device* device, QueryType queryType)
for (int i = 0; i < device->counterSets()->count(); ++i)
{
- MTL::CounterSet* counterSet = static_cast<MTL::CounterSet*>(device->counterSets()->object(i));
+ MTL::CounterSet* counterSet =
+ static_cast<MTL::CounterSet*>(device->counterSets()->object(i));
for (int j = 0; j < counterSet->counters()->count(); ++j)
{
MTL::Counter* counter = static_cast<MTL::Counter*>(counterSet->counters()->object(j));
@@ -50,7 +49,8 @@ Result QueryPoolImpl::init(DeviceImpl* device, const IQueryPool::Desc& desc)
return SLANG_E_NOT_AVAILABLE;
}
- NS::SharedPtr<MTL::CounterSampleBufferDescriptor> counterSampleBufferDesc = NS::TransferPtr(MTL::CounterSampleBufferDescriptor::alloc()->init());
+ NS::SharedPtr<MTL::CounterSampleBufferDescriptor> counterSampleBufferDesc =
+ NS::TransferPtr(MTL::CounterSampleBufferDescriptor::alloc()->init());
counterSampleBufferDesc->setStorageMode(MTL::StorageModeShared);
counterSampleBufferDesc->setSampleCount(m_desc.count);
counterSampleBufferDesc->setCounterSet(counterSet);
@@ -58,7 +58,8 @@ Result QueryPoolImpl::init(DeviceImpl* device, const IQueryPool::Desc& desc)
m_device->m_device->counterSets();
NS::Error* error;
- m_counterSampleBuffer = NS::TransferPtr(m_device->m_device->newCounterSampleBuffer(counterSampleBufferDesc.get(), &error));
+ m_counterSampleBuffer = NS::TransferPtr(
+ m_device->m_device->newCounterSampleBuffer(counterSampleBufferDesc.get(), &error));
return m_counterSampleBuffer ? SLANG_OK : SLANG_FAIL;
}
diff --git a/tools/gfx/metal/metal-query.h b/tools/gfx/metal/metal-query.h
index 3b3e28489..55dc9ebbe 100644
--- a/tools/gfx/metal/metal-query.h
+++ b/tools/gfx/metal/metal-query.h
@@ -23,8 +23,7 @@ public:
Result init(DeviceImpl* device, const IQueryPool::Desc& desc);
virtual SLANG_NO_THROW Result SLANG_MCALL
- getResult(GfxIndex index, GfxCount count, uint64_t* data) override;
-
+ getResult(GfxIndex index, GfxCount count, uint64_t* data) override;
};
} // namespace metal
diff --git a/tools/gfx/metal/metal-render-pass.cpp b/tools/gfx/metal/metal-render-pass.cpp
index bc60cf746..49e470028 100644
--- a/tools/gfx/metal/metal-render-pass.cpp
+++ b/tools/gfx/metal/metal-render-pass.cpp
@@ -1,7 +1,7 @@
// metal-render-pass.cpp
#include "metal-render-pass.h"
-//#include "metal-helper-functions.h"
+// #include "metal-helper-functions.h"
namespace gfx
{
@@ -22,14 +22,10 @@ static inline MTL::LoadAction translateLoadOp(IRenderPassLayout::TargetLoadOp lo
{
switch (loadOp)
{
- case IRenderPassLayout::TargetLoadOp::Load:
- return MTL::LoadActionLoad;
- case IRenderPassLayout::TargetLoadOp::Clear:
- return MTL::LoadActionClear;
- case IRenderPassLayout::TargetLoadOp::DontCare:
- return MTL::LoadActionDontCare;
- default:
- return MTL::LoadAction(0);
+ case IRenderPassLayout::TargetLoadOp::Load: return MTL::LoadActionLoad;
+ case IRenderPassLayout::TargetLoadOp::Clear: return MTL::LoadActionClear;
+ case IRenderPassLayout::TargetLoadOp::DontCare: return MTL::LoadActionDontCare;
+ default: return MTL::LoadAction(0);
}
}
@@ -37,12 +33,9 @@ static inline MTL::StoreAction translateStoreOp(IRenderPassLayout::TargetStoreOp
{
switch (storeOp)
{
- case IRenderPassLayout::TargetStoreOp::Store:
- return MTL::StoreActionStore;
- case IRenderPassLayout::TargetStoreOp::DontCare:
- return MTL::StoreActionDontCare;
- default:
- return MTL::StoreAction(0);
+ case IRenderPassLayout::TargetStoreOp::Store: return MTL::StoreActionStore;
+ case IRenderPassLayout::TargetStoreOp::DontCare: return MTL::StoreActionDontCare;
+ default: return MTL::StoreAction(0);
}
}
@@ -50,25 +43,32 @@ Result RenderPassLayoutImpl::init(DeviceImpl* device, const IRenderPassLayout::D
{
m_device = device;
- FramebufferLayoutImpl* framebufferLayout = static_cast<FramebufferLayoutImpl*>(desc.framebufferLayout);
+ FramebufferLayoutImpl* framebufferLayout =
+ static_cast<FramebufferLayoutImpl*>(desc.framebufferLayout);
assert(framebufferLayout);
- // Initialize render pass descriptor, filling in attachment metadata, but leaving texture data unbound.
+ // Initialize render pass descriptor, filling in attachment metadata, but leaving texture data
+ // unbound.
m_renderPassDesc = NS::TransferPtr(MTL::RenderPassDescriptor::alloc()->init());
m_renderPassDesc->setRenderTargetArrayLength(desc.renderTargetCount);
for (GfxIndex i = 0; i < desc.renderTargetCount; ++i)
{
- MTL::RenderPassColorAttachmentDescriptor* colorAttachment = m_renderPassDesc->colorAttachments()->object(i);
+ MTL::RenderPassColorAttachmentDescriptor* colorAttachment =
+ m_renderPassDesc->colorAttachments()->object(i);
colorAttachment->setLoadAction(translateLoadOp(desc.renderTargetAccess[i].loadOp));
colorAttachment->setStoreAction(translateStoreOp(desc.renderTargetAccess[i].storeOp));
}
- m_renderPassDesc->depthAttachment()->setLoadAction(translateLoadOp(desc.depthStencilAccess->loadOp));
- m_renderPassDesc->depthAttachment()->setStoreAction(translateStoreOp(desc.depthStencilAccess->storeOp));
+ m_renderPassDesc->depthAttachment()->setLoadAction(
+ translateLoadOp(desc.depthStencilAccess->loadOp));
+ m_renderPassDesc->depthAttachment()->setStoreAction(
+ translateStoreOp(desc.depthStencilAccess->storeOp));
- m_renderPassDesc->stencilAttachment()->setLoadAction(translateLoadOp(desc.depthStencilAccess->loadOp));
- m_renderPassDesc->stencilAttachment()->setStoreAction(translateStoreOp(desc.depthStencilAccess->storeOp));
+ m_renderPassDesc->stencilAttachment()->setLoadAction(
+ translateLoadOp(desc.depthStencilAccess->loadOp));
+ m_renderPassDesc->stencilAttachment()->setStoreAction(
+ translateStoreOp(desc.depthStencilAccess->storeOp));
return SLANG_OK;
}
diff --git a/tools/gfx/metal/metal-render-pass.h b/tools/gfx/metal/metal-render-pass.h
index ee66b0c4d..94659a561 100644
--- a/tools/gfx/metal/metal-render-pass.h
+++ b/tools/gfx/metal/metal-render-pass.h
@@ -12,9 +12,7 @@ using namespace Slang;
namespace metal
{
-class RenderPassLayoutImpl
- : public IRenderPassLayout
- , public ComObject
+class RenderPassLayoutImpl : public IRenderPassLayout, public ComObject
{
public:
SLANG_COM_OBJECT_IUNKNOWN_ALL
diff --git a/tools/gfx/metal/metal-resource-views.cpp b/tools/gfx/metal/metal-resource-views.cpp
index ea5c23c10..2f8a4b16e 100644
--- a/tools/gfx/metal/metal-resource-views.cpp
+++ b/tools/gfx/metal/metal-resource-views.cpp
@@ -9,9 +9,7 @@ using namespace Slang;
namespace metal
{
-TextureResourceViewImpl::~TextureResourceViewImpl()
-{
-}
+TextureResourceViewImpl::~TextureResourceViewImpl() {}
Result TextureResourceViewImpl::getNativeHandle(InteropHandle* outHandle)
{
@@ -20,9 +18,7 @@ Result TextureResourceViewImpl::getNativeHandle(InteropHandle* outHandle)
return SLANG_OK;
}
-BufferResourceViewImpl::~BufferResourceViewImpl()
-{
-}
+BufferResourceViewImpl::~BufferResourceViewImpl() {}
Result BufferResourceViewImpl::getNativeHandle(InteropHandle* outHandle)
{
@@ -33,12 +29,11 @@ Result BufferResourceViewImpl::getNativeHandle(InteropHandle* outHandle)
TexelBufferResourceViewImpl::TexelBufferResourceViewImpl(DeviceImpl* device)
: ResourceViewImpl(ViewType::TexelBuffer, device)
-{}
-
-TexelBufferResourceViewImpl::~TexelBufferResourceViewImpl()
{
}
+TexelBufferResourceViewImpl::~TexelBufferResourceViewImpl() {}
+
Result TexelBufferResourceViewImpl::getNativeHandle(InteropHandle* outHandle)
{
return SLANG_E_NOT_IMPLEMENTED;
@@ -54,9 +49,7 @@ Result AccelerationStructureImpl::getNativeHandle(InteropHandle* outHandle)
return SLANG_E_NOT_IMPLEMENTED;
}
-AccelerationStructureImpl::~AccelerationStructureImpl()
-{
-}
+AccelerationStructureImpl::~AccelerationStructureImpl() {}
} // namespace metal
} // namespace gfx
diff --git a/tools/gfx/metal/metal-resource-views.h b/tools/gfx/metal/metal-resource-views.h
index 89986f19d..ae494c2fb 100644
--- a/tools/gfx/metal/metal-resource-views.h
+++ b/tools/gfx/metal/metal-resource-views.h
@@ -26,9 +26,9 @@ public:
public:
ResourceViewImpl(ViewType viewType, DeviceImpl* device)
- : m_type(viewType)
- , m_device(device)
- {}
+ : m_type(viewType), m_device(device)
+ {
+ }
ViewType m_type;
RefPtr<DeviceImpl> m_device;
};
@@ -38,7 +38,8 @@ class TextureResourceViewImpl : public ResourceViewImpl
public:
TextureResourceViewImpl(DeviceImpl* device)
: ResourceViewImpl(ViewType::Texture, device)
- {}
+ {
+ }
~TextureResourceViewImpl();
RefPtr<TextureResourceImpl> m_texture;
NS::SharedPtr<MTL::Texture> m_textureView;
@@ -51,7 +52,8 @@ class BufferResourceViewImpl : public ResourceViewImpl
public:
BufferResourceViewImpl(DeviceImpl* device)
: ResourceViewImpl(ViewType::Buffer, device)
- {}
+ {
+ }
~BufferResourceViewImpl();
RefPtr<BufferResourceImpl> m_buffer;
Offset m_offset;
diff --git a/tools/gfx/metal/metal-sampler.cpp b/tools/gfx/metal/metal-sampler.cpp
index 561b93ea2..6f0c0e36b 100644
--- a/tools/gfx/metal/metal-sampler.cpp
+++ b/tools/gfx/metal/metal-sampler.cpp
@@ -1,5 +1,6 @@
// metal-sampler.cpp
#include "metal-sampler.h"
+
#include "metal-util.h"
namespace gfx
@@ -10,15 +11,14 @@ using namespace Slang;
namespace metal
{
-SamplerStateImpl::~SamplerStateImpl()
-{
-}
+SamplerStateImpl::~SamplerStateImpl() {}
Result SamplerStateImpl::init(DeviceImpl* device, const ISamplerState::Desc& desc)
{
m_device = device;
- NS::SharedPtr<MTL::SamplerDescriptor> samplerDesc = NS::TransferPtr(MTL::SamplerDescriptor::alloc()->init());
+ NS::SharedPtr<MTL::SamplerDescriptor> samplerDesc =
+ NS::TransferPtr(MTL::SamplerDescriptor::alloc()->init());
samplerDesc->setMinFilter(MetalUtil::translateSamplerMinMagFilter(desc.minFilter));
samplerDesc->setMagFilter(MetalUtil::translateSamplerMinMagFilter(desc.magFilter));
@@ -45,7 +45,7 @@ Result SamplerStateImpl::init(DeviceImpl* device, const ISamplerState::Desc& des
// TODO: no support for reduction op
m_samplerState = NS::TransferPtr(m_device->m_device->newSamplerState(samplerDesc.get()));
-
+
return m_samplerState ? SLANG_OK : SLANG_FAIL;
}
diff --git a/tools/gfx/metal/metal-sampler.h b/tools/gfx/metal/metal-sampler.h
index c7156cb2e..0d94a6d2d 100644
--- a/tools/gfx/metal/metal-sampler.h
+++ b/tools/gfx/metal/metal-sampler.h
@@ -21,7 +21,7 @@ public:
~SamplerStateImpl();
Result init(DeviceImpl* device, const ISamplerState::Desc& desc);
-
+
virtual SLANG_NO_THROW Result SLANG_MCALL getNativeHandle(InteropHandle* outHandle) override;
};
diff --git a/tools/gfx/metal/metal-shader-object-layout.cpp b/tools/gfx/metal/metal-shader-object-layout.cpp
index 94bcb6db6..e674b830a 100644
--- a/tools/gfx/metal/metal-shader-object-layout.cpp
+++ b/tools/gfx/metal/metal-shader-object-layout.cpp
@@ -29,7 +29,8 @@ ShaderObjectLayoutImpl::SubObjectRangeStride::SubObjectRangeStride(
}
}
-Result ShaderObjectLayoutImpl::Builder::setElementTypeLayout(slang::TypeLayoutReflection* typeLayout)
+Result ShaderObjectLayoutImpl::Builder::setElementTypeLayout(
+ slang::TypeLayoutReflection* typeLayout)
{
typeLayout = _unwrapParameterGroups(typeLayout, m_containerType);
@@ -94,8 +95,7 @@ Result ShaderObjectLayoutImpl::Builder::setElementTypeLayout(slang::TypeLayoutRe
m_textureCount += count;
m_textureRanges.add(r);
break;
- default:
- break;
+ default: break;
}
// We'd like to extract the information on the Metal resource
@@ -125,7 +125,9 @@ Result ShaderObjectLayoutImpl::Builder::setElementTypeLayout(slang::TypeLayoutRe
SLANG_ASSERT(descriptorSetIndex == 0);
SlangInt descriptorRangeIndex = typeLayout->getBindingRangeFirstDescriptorRangeIndex(r);
- auto registerOffset = typeLayout->getDescriptorSetDescriptorRangeIndexOffset(descriptorSetIndex, descriptorRangeIndex);
+ auto registerOffset = typeLayout->getDescriptorSetDescriptorRangeIndexOffset(
+ descriptorSetIndex,
+ descriptorRangeIndex);
bindingRangeInfo.registerOffset = (uint32_t)registerOffset;
}
@@ -160,18 +162,18 @@ Result ShaderObjectLayoutImpl::Builder::setElementTypeLayout(slang::TypeLayoutRe
switch (slangBindingType)
{
default:
- {
- // In the case of `ConstantBuffer<X>` or `ParameterBlock<X>`
- // we can construct a layout from the element type directly.
- //
- auto elementTypeLayout = slangLeafTypeLayout->getElementTypeLayout();
- createForElementType(
- m_renderer,
- m_session,
- elementTypeLayout,
- subObjectLayout.writeRef());
- }
- break;
+ {
+ // In the case of `ConstantBuffer<X>` or `ParameterBlock<X>`
+ // we can construct a layout from the element type directly.
+ //
+ auto elementTypeLayout = slangLeafTypeLayout->getElementTypeLayout();
+ createForElementType(
+ m_renderer,
+ m_session,
+ elementTypeLayout,
+ subObjectLayout.writeRef());
+ }
+ break;
case slang::BindingType::ExistentialValue:
// In the case of an interface-type sub-object range, we can only
// construct a layout if we have static specialization information
@@ -193,8 +195,9 @@ Result ShaderObjectLayoutImpl::Builder::setElementTypeLayout(slang::TypeLayoutRe
// increase the size of the ordinary data buffer we need to
// allocate for the parent object.
//
- uint32_t ordinaryDataEnd = subObjectRange.offset.pendingOrdinaryData
- + (uint32_t)bindingRange.count * subObjectRange.stride.pendingOrdinaryData;
+ uint32_t ordinaryDataEnd =
+ subObjectRange.offset.pendingOrdinaryData +
+ (uint32_t)bindingRange.count * subObjectRange.stride.pendingOrdinaryData;
if (ordinaryDataEnd > m_totalOrdinaryDataSize)
{
@@ -211,8 +214,7 @@ Result ShaderObjectLayoutImpl::Builder::setElementTypeLayout(slang::TypeLayoutRe
SlangResult ShaderObjectLayoutImpl::Builder::build(ShaderObjectLayoutImpl** outLayout)
{
- auto layout =
- RefPtr<ShaderObjectLayoutImpl>(new ShaderObjectLayoutImpl());
+ auto layout = RefPtr<ShaderObjectLayoutImpl>(new ShaderObjectLayoutImpl());
SLANG_RETURN_ON_FAIL(layout->_init(this));
returnRefPtrMove(outLayout, layout);
@@ -224,7 +226,9 @@ slang::TypeLayoutReflection* ShaderObjectLayoutImpl::getParameterBlockTypeLayout
if (!m_parameterBlockTypeLayout)
{
m_parameterBlockTypeLayout = m_slangSession->getTypeLayout(
- m_elementTypeLayout->getType(), 0, slang::LayoutRules::MetalArgumentBufferTier2);
+ m_elementTypeLayout->getType(),
+ 0,
+ slang::LayoutRules::MetalArgumentBufferTier2);
}
return m_parameterBlockTypeLayout;
}
@@ -272,13 +276,16 @@ Result RootShaderObjectLayoutImpl::Builder::build(RootShaderObjectLayoutImpl** o
return SLANG_OK;
}
-void RootShaderObjectLayoutImpl::Builder::addGlobalParams(slang::VariableLayoutReflection* globalsLayout)
+void RootShaderObjectLayoutImpl::Builder::addGlobalParams(
+ slang::VariableLayoutReflection* globalsLayout)
{
setElementTypeLayout(globalsLayout->getTypeLayout());
}
void RootShaderObjectLayoutImpl::Builder::addEntryPoint(
- SlangStage stage, ShaderObjectLayoutImpl* entryPointLayout, slang::EntryPointLayout* slangEntryPoint)
+ SlangStage stage,
+ ShaderObjectLayoutImpl* entryPointLayout,
+ slang::EntryPointLayout* slangEntryPoint)
{
EntryPointInfo info;
info.layout = entryPointLayout;
@@ -301,7 +308,10 @@ Result RootShaderObjectLayoutImpl::create(
auto slangEntryPoint = programLayout->getEntryPointByIndex(e);
RefPtr<ShaderObjectLayoutImpl> entryPointLayout;
SLANG_RETURN_ON_FAIL(ShaderObjectLayoutImpl::createForElementType(
- renderer, program->getSession(), slangEntryPoint->getTypeLayout(), entryPointLayout.writeRef()));
+ renderer,
+ program->getSession(),
+ slangEntryPoint->getTypeLayout(),
+ entryPointLayout.writeRef()));
builder.addEntryPoint(slangEntryPoint->getStage(), entryPointLayout, slangEntryPoint);
}
diff --git a/tools/gfx/metal/metal-shader-object-layout.h b/tools/gfx/metal/metal-shader-object-layout.h
index 24a969c89..02833e4ca 100644
--- a/tools/gfx/metal/metal-shader-object-layout.h
+++ b/tools/gfx/metal/metal-shader-object-layout.h
@@ -63,8 +63,7 @@ public:
/// Offset information for a sub-object range
struct SubObjectRangeOffset : BindingOffset
{
- SubObjectRangeOffset()
- {}
+ SubObjectRangeOffset() {}
SubObjectRangeOffset(slang::VariableLayoutReflection* varLayout);
@@ -75,8 +74,7 @@ public:
/// Stride information for a sub-object range
struct SubObjectRangeStride : BindingOffset
{
- SubObjectRangeStride()
- {}
+ SubObjectRangeStride() {}
SubObjectRangeStride(slang::TypeLayoutReflection* typeLayout);
@@ -105,7 +103,8 @@ public:
public:
Builder(RendererBase* renderer, slang::ISession* session)
: m_renderer(renderer), m_session(session)
- {}
+ {
+ }
RendererBase* m_renderer;
slang::ISession* m_session;
@@ -129,7 +128,7 @@ public:
Index m_subObjectCount = 0;
uint32_t m_totalOrdinaryDataSize = 0;
-
+
/// The container type of this shader object. When `m_containerType` is
/// `StructuredBuffer` or `Array`, this shader object represents a collection
/// instead of a single object.
@@ -161,10 +160,7 @@ public:
RendererBase* getRenderer() { return m_renderer; }
- slang::TypeReflection* getType()
- {
- return m_elementTypeLayout->getType();
- }
+ slang::TypeReflection* getType() { return m_elementTypeLayout->getType(); }
/// Get the indices that represent all the buffer ranges in this type
List<Index> const& getBufferRanges() const { return m_bufferRanges; }
@@ -178,6 +174,7 @@ public:
uint32_t getTotalOrdinaryDataSize() const { return m_totalOrdinaryDataSize; }
slang::TypeLayoutReflection* getParameterBlockTypeLayout();
+
protected:
Result _init(Builder const* builder);
@@ -204,7 +201,8 @@ public:
{
RefPtr<ShaderObjectLayoutImpl> layout;
- /// The offset for this entry point's parameters, relative to the starting offset for the program
+ /// The offset for this entry point's parameters, relative to the starting offset for the
+ /// program
BindingOffset offset;
};
@@ -217,11 +215,15 @@ public:
: Super::Builder(renderer, program->getSession())
, m_program(program)
, m_programLayout(programLayout)
- {}
+ {
+ }
Result build(RootShaderObjectLayoutImpl** outLayout);
void addGlobalParams(slang::VariableLayoutReflection* globalsLayout);
- void addEntryPoint(SlangStage stage, ShaderObjectLayoutImpl* entryPointLayout, slang::EntryPointLayout* slangEntryPoint);
+ void addEntryPoint(
+ SlangStage stage,
+ ShaderObjectLayoutImpl* entryPointLayout,
+ slang::EntryPointLayout* slangEntryPoint);
slang::IComponentType* m_program;
slang::ProgramLayout* m_programLayout;
@@ -244,7 +246,7 @@ public:
protected:
Result _init(Builder const* builder);
- ComPtr<slang::IComponentType> m_program;
+ ComPtr<slang::IComponentType> m_program;
slang::ProgramLayout* m_programLayout = nullptr;
List<EntryPointInfo> m_entryPoints;
diff --git a/tools/gfx/metal/metal-shader-object.cpp b/tools/gfx/metal/metal-shader-object.cpp
index 6d421e065..7ee7e8023 100644
--- a/tools/gfx/metal/metal-shader-object.cpp
+++ b/tools/gfx/metal/metal-shader-object.cpp
@@ -1,8 +1,8 @@
// metal-shader-object.cpp
#include "metal-shader-object.h"
-#include "metal-sampler.h"
#include "metal-device.h"
+#include "metal-sampler.h"
namespace gfx
{
@@ -24,12 +24,10 @@ Result ShaderObjectImpl::create(
return SLANG_OK;
}
-ShaderObjectImpl::~ShaderObjectImpl()
-{
-}
+ShaderObjectImpl::~ShaderObjectImpl() {}
SLANG_NO_THROW Result SLANG_MCALL
- ShaderObjectImpl::setData(ShaderOffset const& inOffset, void const* data, size_t inSize)
+ShaderObjectImpl::setData(ShaderOffset const& inOffset, void const* data, size_t inSize)
{
Index offset = inOffset.uniformOffset;
Index size = inSize;
@@ -59,7 +57,7 @@ SLANG_NO_THROW Result SLANG_MCALL
}
SLANG_NO_THROW Result SLANG_MCALL
- ShaderObjectImpl::setResource(ShaderOffset const& offset, IResourceView* resourceView)
+ShaderObjectImpl::setResource(ShaderOffset const& offset, IResourceView* resourceView)
{
if (offset.bindingRangeIndex < 0)
return SLANG_E_INVALID_ARG;
@@ -74,26 +72,30 @@ SLANG_NO_THROW Result SLANG_MCALL
case slang::BindingType::Texture:
case slang::BindingType::MutableTexture:
SLANG_ASSERT(resourceViewImpl->m_type == ResourceViewImpl::ViewType::Texture);
- m_textures[bindingRange.baseIndex + offset.bindingArrayIndex] = static_cast<TextureResourceViewImpl*>(resourceView);
+ m_textures[bindingRange.baseIndex + offset.bindingArrayIndex] =
+ static_cast<TextureResourceViewImpl*>(resourceView);
break;
case slang::BindingType::RawBuffer:
case slang::BindingType::ConstantBuffer:
case slang::BindingType::MutableRawBuffer:
SLANG_ASSERT(resourceViewImpl->m_type == ResourceViewImpl::ViewType::Buffer);
- m_buffers[bindingRange.baseIndex + offset.bindingArrayIndex] = static_cast<BufferResourceViewImpl*>(resourceView);
+ m_buffers[bindingRange.baseIndex + offset.bindingArrayIndex] =
+ static_cast<BufferResourceViewImpl*>(resourceView);
break;
case slang::BindingType::TypedBuffer:
case slang::BindingType::MutableTypedBuffer:
SLANG_ASSERT(!"Not implemented");
// SLANG_ASSERT(resourceViewImpl->m_type == ResourceViewImpl::ViewType::TexelBuffer);
- // m_textures[bindingRange.baseIndex + offset.bindingArrayIndex] = static_cast<TextureResourceViewImpl*>(resourceView);
+ // m_textures[bindingRange.baseIndex + offset.bindingArrayIndex] =
+ // static_cast<TextureResourceViewImpl*>(resourceView);
break;
}
m_isArgumentBufferDirty = true;
return SLANG_OK;
}
-SLANG_NO_THROW Result SLANG_MCALL ShaderObjectImpl::setSampler(ShaderOffset const& offset, ISamplerState* sampler)
+SLANG_NO_THROW Result SLANG_MCALL
+ShaderObjectImpl::setSampler(ShaderOffset const& offset, ISamplerState* sampler)
{
if (offset.bindingRangeIndex < 0)
return SLANG_E_INVALID_ARG;
@@ -102,7 +104,8 @@ SLANG_NO_THROW Result SLANG_MCALL ShaderObjectImpl::setSampler(ShaderOffset cons
return SLANG_E_INVALID_ARG;
auto& bindingRange = layout->getBindingRange(offset.bindingRangeIndex);
- m_samplers[bindingRange.baseIndex + offset.bindingArrayIndex] = static_cast<SamplerStateImpl*>(sampler);
+ m_samplers[bindingRange.baseIndex + offset.bindingArrayIndex] =
+ static_cast<SamplerStateImpl*>(sampler);
m_isArgumentBufferDirty = true;
return SLANG_OK;
}
@@ -169,7 +172,7 @@ Result ShaderObjectImpl::init(IDevice* device, ShaderObjectLayoutImpl* layout)
Result ShaderObjectImpl::_writeOrdinaryData(
void* dest,
- size_t destSize,
+ size_t destSize,
ShaderObjectLayoutImpl* layout)
{
// We start by simply writing in the ordinary data contained directly in this object.
@@ -197,7 +200,8 @@ Result ShaderObjectImpl::_writeOrdinaryData(
for (auto const& subObjectRangeInfo : layout->getSubObjectRanges())
{
Index subObjectRangeIndex = subObjectRangeCounter++;
- auto const& bindingRangeInfo = layout->getBindingRange(subObjectRangeInfo.bindingRangeIndex);
+ auto const& bindingRangeInfo =
+ layout->getBindingRange(subObjectRangeInfo.bindingRangeIndex);
// We only need to handle sub-object ranges for interface/existential-type fields,
// because fields of constant-buffer or parameter-block type are responsible for
@@ -250,11 +254,15 @@ Result ShaderObjectImpl::_writeOrdinaryData(
ShaderObjectLayoutImpl* subObjectLayout = subObject->getLayout();
- auto subObjectOffset = subObjectRangePendingDataOffset + i * subObjectRangePendingDataStride;
+ auto subObjectOffset =
+ subObjectRangePendingDataOffset + i * subObjectRangePendingDataStride;
auto subObjectDest = (char*)dest + subObjectOffset;
- subObject->_writeOrdinaryData(subObjectDest, destSize - subObjectOffset, subObjectLayout);
+ subObject->_writeOrdinaryData(
+ subObjectDest,
+ destSize - subObjectOffset,
+ subObjectLayout);
}
}
return SLANG_OK;
@@ -294,7 +302,7 @@ Result ShaderObjectImpl::_ensureOrdinaryDataBufferCreatedIfNeeded(
// don't need or want to inline it into this call site.
//
- MemoryRange range = { 0, ordinaryDataSize };
+ MemoryRange range = {0, ordinaryDataSize};
void* ordinaryData;
SLANG_RETURN_ON_FAIL(m_ordinaryDataBuffer->map(&range, &ordinaryData));
auto result = _writeOrdinaryData(ordinaryData, ordinaryDataSize, layout);
@@ -389,78 +397,98 @@ BufferResourceImpl* ShaderObjectImpl::_ensureArgumentBufferUpToDate(
// the offsets for each field.
//
auto dataSize = typeLayout->getSize();
- MemoryRange range = { 0, dataSize };
+ MemoryRange range = {0, dataSize};
void* argumentData;
SLANG_RETURN_NULL_ON_FAIL(m_argumentBuffer->map(&range, &argumentData));
// Now fill in argument values to `argumentData`.
int bindingRangeIndex = 0;
- SLANG_ASSERT(defaultTypeLayout->getBindingRangeCount() == typeLayout->getBindingRangeCount());
+ SLANG_ASSERT(
+ defaultTypeLayout->getBindingRangeCount() == typeLayout->getBindingRangeCount());
int bufferBindingIndexOffset = layout->getTotalOrdinaryDataSize() != 0 ? 1 : 0;
-
- for (unsigned int bindingRangeIndex = 0; bindingRangeIndex < defaultTypeLayout->getBindingRangeCount(); bindingRangeIndex++)
+
+ for (unsigned int bindingRangeIndex = 0;
+ bindingRangeIndex < defaultTypeLayout->getBindingRangeCount();
+ bindingRangeIndex++)
{
int bindingCount = defaultTypeLayout->getBindingRangeBindingCount(bindingRangeIndex);
int setIndex = defaultTypeLayout->getBindingRangeDescriptorSetIndex(bindingRangeIndex);
- int rangeIndex = defaultTypeLayout->getBindingRangeFirstDescriptorRangeIndex(bindingRangeIndex);
- int bindingOffset = defaultTypeLayout->getDescriptorSetDescriptorRangeIndexOffset(setIndex, rangeIndex);
+ int rangeIndex =
+ defaultTypeLayout->getBindingRangeFirstDescriptorRangeIndex(bindingRangeIndex);
+ int bindingOffset =
+ defaultTypeLayout->getDescriptorSetDescriptorRangeIndexOffset(setIndex, rangeIndex);
auto bindingType = defaultTypeLayout->getBindingRangeType(bindingRangeIndex);
for (int i = 0; i < bindingCount; i++)
{
- auto argumentDataOffset = typeLayout->getDescriptorSetDescriptorRangeIndexOffset(setIndex, rangeIndex) + i * sizeof(uint64_t);
+ auto argumentDataOffset =
+ typeLayout->getDescriptorSetDescriptorRangeIndexOffset(setIndex, rangeIndex) +
+ i * sizeof(uint64_t);
auto argumentPtr = (uint8_t*)argumentData + argumentDataOffset;
auto resourceIndex = bindingOffset + i;
switch (bindingType)
{
case slang::BindingType::ConstantBuffer:
case slang::BindingType::ParameterBlock:
- {
- if (m_objects[resourceIndex])
{
- auto subArgumentBuffer = m_objects[resourceIndex]->_ensureArgumentBufferUpToDate(device, m_objects[resourceIndex]->getLayout());
- if (subArgumentBuffer)
+ if (m_objects[resourceIndex])
{
- gfx::DeviceAddress bufferPtr = subArgumentBuffer->m_buffer->gpuAddress();
- memcpy(argumentPtr, &bufferPtr, sizeof(bufferPtr));
+ auto subArgumentBuffer =
+ m_objects[resourceIndex]->_ensureArgumentBufferUpToDate(
+ device,
+ m_objects[resourceIndex]->getLayout());
+ if (subArgumentBuffer)
+ {
+ gfx::DeviceAddress bufferPtr =
+ subArgumentBuffer->m_buffer->gpuAddress();
+ memcpy(argumentPtr, &bufferPtr, sizeof(bufferPtr));
+ }
}
+ break;
}
- break;
- }
case slang::BindingType::RawBuffer:
case slang::BindingType::MutableRawBuffer:
- {
- auto bufferViewImpl = static_cast<BufferResourceViewImpl*>(m_buffers[resourceIndex + bufferBindingIndexOffset].get());
-
- if (bufferViewImpl)
{
- gfx::DeviceAddress bufferPtr = bufferViewImpl->m_buffer->getDeviceAddress() + bufferViewImpl->m_offset;
- memcpy(argumentPtr, &bufferPtr, sizeof(bufferPtr));
+ auto bufferViewImpl = static_cast<BufferResourceViewImpl*>(
+ m_buffers[resourceIndex + bufferBindingIndexOffset].get());
+
+ if (bufferViewImpl)
+ {
+ gfx::DeviceAddress bufferPtr =
+ bufferViewImpl->m_buffer->getDeviceAddress() +
+ bufferViewImpl->m_offset;
+ memcpy(argumentPtr, &bufferPtr, sizeof(bufferPtr));
+ }
+ break;
}
- break;
- }
case slang::BindingType::Texture:
case slang::BindingType::MutableTexture:
- {
- auto textureViewImpl = static_cast<TextureResourceViewImpl*>(m_textures[resourceIndex].get());
- if (textureViewImpl)
{
- auto resourceId = textureViewImpl->m_textureView->gpuResourceID();
- memcpy(argumentPtr, &resourceId, sizeof(resourceId));
+ auto textureViewImpl =
+ static_cast<TextureResourceViewImpl*>(m_textures[resourceIndex].get());
+ if (textureViewImpl)
+ {
+ auto resourceId = textureViewImpl->m_textureView->gpuResourceID();
+ memcpy(argumentPtr, &resourceId, sizeof(resourceId));
+ }
+ break;
}
- break;
- }
case slang::BindingType::Sampler:
- {
- auto samplerStateImpl = static_cast<SamplerStateImpl*>(m_samplers[resourceIndex].get());
- auto resourceId = samplerStateImpl->m_samplerState->gpuResourceID();
- memcpy(argumentPtr, &resourceId, sizeof(resourceId));
- break;
- }
+ {
+ auto samplerStateImpl =
+ static_cast<SamplerStateImpl*>(m_samplers[resourceIndex].get());
+ auto resourceId = samplerStateImpl->m_samplerState->gpuResourceID();
+ memcpy(argumentPtr, &resourceId, sizeof(resourceId));
+ break;
+ }
}
}
}
- writeOrdinaryDataIntoArgumentBuffer(typeLayout, defaultTypeLayout, (uint8_t*)argumentData, (uint8_t*)m_data.getBuffer());
+ writeOrdinaryDataIntoArgumentBuffer(
+ typeLayout,
+ defaultTypeLayout,
+ (uint8_t*)argumentData,
+ (uint8_t*)m_data.getBuffer());
m_argumentBuffer->unmap(&range);
m_isArgumentBufferDirty = false;
}
@@ -475,7 +503,7 @@ Result ShaderObjectImpl::bindAsParameterBlock(
{
if (!context->device->m_hasArgumentBufferTier2)
return SLANG_FAIL;
-
+
auto argumentBuffer = _ensureArgumentBufferUpToDate(context->device, layout);
if (m_argumentBuffer)
@@ -531,7 +559,9 @@ Result ShaderObjectImpl::bindAsValue(
for (uint32_t i = 0; i < count; ++i)
{
auto buffer = m_buffers[baseIndex + i];
- context->setBuffer(buffer ? buffer->m_buffer->m_buffer.get() : nullptr, registerOffset + i);
+ context->setBuffer(
+ buffer ? buffer->m_buffer->m_buffer.get() : nullptr,
+ registerOffset + i);
}
}
@@ -544,7 +574,9 @@ Result ShaderObjectImpl::bindAsValue(
for (uint32_t i = 0; i < count; ++i)
{
auto texture = m_textures[baseIndex + i];
- context->setTexture(texture ? texture->m_textureView.get() : nullptr, registerOffset + i);
+ context->setTexture(
+ texture ? texture->m_textureView.get() : nullptr,
+ registerOffset + i);
}
}
@@ -557,7 +589,9 @@ Result ShaderObjectImpl::bindAsValue(
for (uint32_t i = 0; i < count; ++i)
{
auto sampler = m_samplers[baseIndex + i];
- context->setSampler(sampler ? sampler->m_samplerState.get() : nullptr, registerOffset + i);
+ context->setSampler(
+ sampler ? sampler->m_samplerState.get() : nullptr,
+ registerOffset + i);
}
}
@@ -585,31 +619,33 @@ Result ShaderObjectImpl::bindAsValue(
switch (bindingRange.bindingType)
{
case slang::BindingType::ConstantBuffer:
- {
- BindingOffset objOffset = rangeOffset;
- for (Index i = 0; i < count; ++i)
{
- auto subObject = m_objects[subObjectIndex + i];
+ BindingOffset objOffset = rangeOffset;
+ for (Index i = 0; i < count; ++i)
+ {
+ auto subObject = m_objects[subObjectIndex + i];
- // Unsurprisingly, we bind each object in the range as
- // a constant buffer.
- //
- SLANG_RETURN_ON_FAIL(subObject->bindAsConstantBuffer(context, objOffset, subObjectLayout));
+ // Unsurprisingly, we bind each object in the range as
+ // a constant buffer.
+ //
+ SLANG_RETURN_ON_FAIL(
+ subObject->bindAsConstantBuffer(context, objOffset, subObjectLayout));
- objOffset += rangeStride;
+ objOffset += rangeStride;
+ }
+ break;
}
- break;
- }
case slang::BindingType::ParameterBlock:
- {
- BindingOffset objOffset = rangeOffset;
- for (Index i = 0; i < count; ++i)
{
- auto subObject = m_objects[subObjectIndex + i];
- SLANG_RETURN_ON_FAIL(subObject->bindAsParameterBlock(context, objOffset, subObjectLayout));
- objOffset += rangeStride;
+ BindingOffset objOffset = rangeOffset;
+ for (Index i = 0; i < count; ++i)
+ {
+ auto subObject = m_objects[subObjectIndex + i];
+ SLANG_RETURN_ON_FAIL(
+ subObject->bindAsParameterBlock(context, objOffset, subObjectLayout));
+ objOffset += rangeStride;
+ }
}
- }
break;
#if 0
@@ -638,8 +674,7 @@ Result ShaderObjectImpl::bindAsValue(
break;
#endif
- default:
- break;
+ default: break;
}
}
@@ -668,9 +703,7 @@ Result RootShaderObjectImpl::collectSpecializationArgs(ExtendedShaderObjectTypeL
return SLANG_OK;
}
-Result RootShaderObjectImpl::bindAsRoot(
- BindingContext* context,
- RootShaderObjectLayoutImpl* layout)
+Result RootShaderObjectImpl::bindAsRoot(BindingContext* context, RootShaderObjectLayoutImpl* layout)
{
// When binding an entire root shader object, we need to deal with
// the way that specialization might have allocated space for "pending"
@@ -724,7 +757,8 @@ Result RootShaderObjectImpl::bindAsRoot(
// the absolute offsets as are used for the global scope do not apply
// (because entry points don't need to deal with explicit bindings).
//
- SLANG_RETURN_ON_FAIL(entryPoint->bindAsConstantBuffer(context, entryPointOffset, entryPointInfo.layout));
+ SLANG_RETURN_ON_FAIL(
+ entryPoint->bindAsConstantBuffer(context, entryPointOffset, entryPointInfo.layout));
}
return SLANG_OK;
diff --git a/tools/gfx/metal/metal-shader-object.h b/tools/gfx/metal/metal-shader-object.h
index 8a3d5d392..256995fe4 100644
--- a/tools/gfx/metal/metal-shader-object.h
+++ b/tools/gfx/metal/metal-shader-object.h
@@ -1,12 +1,11 @@
// metal-shader-object.h
#pragma once
#include "metal-base.h"
+#include "metal-helper-functions.h"
#include "metal-resource-views.h"
#include "metal-sampler.h"
#include "metal-shader-object-layout.h"
-#include "metal-helper-functions.h"
-
namespace gfx
{
@@ -16,10 +15,7 @@ namespace metal
{
class ShaderObjectImpl
- : public ShaderObjectBaseImpl<
- ShaderObjectImpl,
- ShaderObjectLayoutImpl,
- SimpleShaderObjectData>
+ : public ShaderObjectBaseImpl<ShaderObjectImpl, ShaderObjectLayoutImpl, SimpleShaderObjectData>
{
public:
static Result create(
@@ -51,33 +47,31 @@ public:
}
SLANG_NO_THROW Result SLANG_MCALL
- setData(ShaderOffset const& inOffset, void const* data, size_t inSize) SLANG_OVERRIDE;
+ setData(ShaderOffset const& inOffset, void const* data, size_t inSize) SLANG_OVERRIDE;
SLANG_NO_THROW Result SLANG_MCALL
- setResource(ShaderOffset const& offset, IResourceView* resourceView) SLANG_OVERRIDE;
+ setResource(ShaderOffset const& offset, IResourceView* resourceView) SLANG_OVERRIDE;
SLANG_NO_THROW Result SLANG_MCALL setSampler(ShaderOffset const& offset, ISamplerState* sampler)
SLANG_OVERRIDE;
SLANG_NO_THROW Result SLANG_MCALL setCombinedTextureSampler(
- ShaderOffset const& offset, IResourceView* textureView, ISamplerState* sampler) SLANG_OVERRIDE
+ ShaderOffset const& offset,
+ IResourceView* textureView,
+ ISamplerState* sampler) SLANG_OVERRIDE
{
return SLANG_E_NOT_IMPLEMENTED;
}
public:
-
-
protected:
friend class ProgramVars;
Result init(IDevice* device, ShaderObjectLayoutImpl* layout);
- /// Write the uniform/ordinary data of this object into the given `dest` buffer at the given `offset`
- Result _writeOrdinaryData(
- void* dest,
- size_t destSize,
- ShaderObjectLayoutImpl* layout);
+ /// Write the uniform/ordinary data of this object into the given `dest` buffer at the given
+ /// `offset`
+ Result _writeOrdinaryData(void* dest, size_t destSize, ShaderObjectLayoutImpl* layout);
/// Ensure that the `m_ordinaryDataBuffer` has been created, if it is needed
///
@@ -162,10 +156,9 @@ public:
};
class MutableShaderObjectImpl
- : public MutableShaderObject<
- MutableShaderObjectImpl,
- ShaderObjectLayoutImpl>
-{};
+ : public MutableShaderObject<MutableShaderObjectImpl, ShaderObjectLayoutImpl>
+{
+};
class RootShaderObjectImpl : public ShaderObjectImpl
{
@@ -175,14 +168,24 @@ public:
virtual SLANG_NO_THROW uint32_t SLANG_MCALL addRef() override { return 1; }
virtual SLANG_NO_THROW uint32_t SLANG_MCALL release() override { return 1; }
- static Result create(IDevice* device, RootShaderObjectLayoutImpl* layout, RootShaderObjectImpl** outShaderObject);
+ static Result create(
+ IDevice* device,
+ RootShaderObjectLayoutImpl* layout,
+ RootShaderObjectImpl** outShaderObject);
Result init(IDevice* device, RootShaderObjectLayoutImpl* layout);
- RootShaderObjectLayoutImpl* getLayout() { return static_cast<RootShaderObjectLayoutImpl*>(m_layout.Ptr()); }
+ RootShaderObjectLayoutImpl* getLayout()
+ {
+ return static_cast<RootShaderObjectLayoutImpl*>(m_layout.Ptr());
+ }
- GfxCount SLANG_MCALL getEntryPointCount() SLANG_OVERRIDE { return (GfxCount)m_entryPoints.getCount(); }
- SlangResult SLANG_MCALL getEntryPoint(GfxIndex index, IShaderObject** outEntryPoint) SLANG_OVERRIDE
+ GfxCount SLANG_MCALL getEntryPointCount() SLANG_OVERRIDE
+ {
+ return (GfxCount)m_entryPoints.getCount();
+ }
+ SlangResult SLANG_MCALL getEntryPoint(GfxIndex index, IShaderObject** outEntryPoint)
+ SLANG_OVERRIDE
{
returnComPtr(outEntryPoint, m_entryPoints[index]);
return SLANG_OK;
@@ -191,9 +194,7 @@ public:
virtual Result collectSpecializationArgs(ExtendedShaderObjectTypeList& args) override;
/// Bind this object as a root shader object
- Result bindAsRoot(
- BindingContext* context,
- RootShaderObjectLayoutImpl* specializedLayout);
+ Result bindAsRoot(BindingContext* context, RootShaderObjectLayoutImpl* specializedLayout);
protected:
List<RefPtr<ShaderObjectImpl>> m_entryPoints;
diff --git a/tools/gfx/metal/metal-shader-program.cpp b/tools/gfx/metal/metal-shader-program.cpp
index e0f973eb6..c95e99d04 100644
--- a/tools/gfx/metal/metal-shader-program.cpp
+++ b/tools/gfx/metal/metal-shader-program.cpp
@@ -1,5 +1,6 @@
// metal-shader-program.cpp
#include "metal-shader-program.h"
+
#include "metal-device.h"
#include "metal-util.h"
@@ -16,18 +17,22 @@ ShaderProgramImpl::ShaderProgramImpl(DeviceImpl* device)
{
}
-ShaderProgramImpl::~ShaderProgramImpl()
-{
-}
+ShaderProgramImpl::~ShaderProgramImpl() {}
-Result ShaderProgramImpl::createShaderModule(slang::EntryPointReflection* entryPointInfo, ComPtr<ISlangBlob> kernelCode)
+Result ShaderProgramImpl::createShaderModule(
+ slang::EntryPointReflection* entryPointInfo,
+ ComPtr<ISlangBlob> kernelCode)
{
Module module;
module.stage = entryPointInfo->getStage();
module.entryPointName = entryPointInfo->getNameOverride();
module.code = kernelCode;
-
- dispatch_data_t data = dispatch_data_create(kernelCode->getBufferPointer(), kernelCode->getBufferSize(), dispatch_get_main_queue(), NULL);
+
+ dispatch_data_t data = dispatch_data_create(
+ kernelCode->getBufferPointer(),
+ kernelCode->getBufferSize(),
+ dispatch_get_main_queue(),
+ NULL);
NS::Error* error;
module.library = NS::TransferPtr(m_device->m_device->newLibrary(data, &error));
if (!module.library)
diff --git a/tools/gfx/metal/metal-shader-program.h b/tools/gfx/metal/metal-shader-program.h
index d6deb6574..691e12c9e 100644
--- a/tools/gfx/metal/metal-shader-program.h
+++ b/tools/gfx/metal/metal-shader-program.h
@@ -31,7 +31,9 @@ public:
ShaderProgramImpl(DeviceImpl* device);
~ShaderProgramImpl();
- virtual Result createShaderModule(slang::EntryPointReflection* entryPointInfo, ComPtr<ISlangBlob> kernelCode) override;
+ virtual Result createShaderModule(
+ slang::EntryPointReflection* entryPointInfo,
+ ComPtr<ISlangBlob> kernelCode) override;
};
diff --git a/tools/gfx/metal/metal-swap-chain.cpp b/tools/gfx/metal/metal-swap-chain.cpp
index 1478c8bf4..75bb5afa1 100644
--- a/tools/gfx/metal/metal-swap-chain.cpp
+++ b/tools/gfx/metal/metal-swap-chain.cpp
@@ -1,8 +1,8 @@
// metal-swap-chain.cpp
#include "metal-swap-chain.h"
-#include "metal-util.h"
#include "../apple/cocoa-util.h"
+#include "metal-util.h"
namespace gfx
{
@@ -31,7 +31,10 @@ void SwapchainImpl::createImages()
{
ITextureResource::Desc imageDesc = {};
imageDesc.allowedStates = ResourceStateSet(
- ResourceState::Present, ResourceState::RenderTarget, ResourceState::CopyDestination, ResourceState::CopySource);
+ ResourceState::Present,
+ ResourceState::RenderTarget,
+ ResourceState::CopyDestination,
+ ResourceState::CopySource);
imageDesc.type = IResource::Type::Texture2D;
imageDesc.arraySize = 0;
imageDesc.format = m_desc.format;
@@ -40,7 +43,10 @@ void SwapchainImpl::createImages()
imageDesc.size.depth = 1;
imageDesc.numMipLevels = 1;
imageDesc.defaultState = ResourceState::Present;
- m_device->createTextureResource(imageDesc, nullptr, (gfx::ITextureResource**)m_images[i].writeRef());
+ m_device->createTextureResource(
+ imageDesc,
+ nullptr,
+ (gfx::ITextureResource**)m_images[i].writeRef());
}
}
@@ -105,7 +111,9 @@ Result SwapchainImpl::present()
MTL::CommandBuffer* commandBuffer = m_device->m_commandQueue->commandBuffer();
MTL::BlitCommandEncoder* encoder = commandBuffer->blitCommandEncoder();
- encoder->copyFromTexture(m_images[m_currentImageIndex]->m_texture.get(), m_currentDrawable->texture());
+ encoder->copyFromTexture(
+ m_images[m_currentImageIndex]->m_texture.get(),
+ m_currentDrawable->texture());
encoder->endEncoding();
commandBuffer->presentDrawable(m_currentDrawable.get());
commandBuffer->commit();
@@ -146,5 +154,5 @@ Result SwapchainImpl::setFullScreenMode(bool mode)
return SLANG_E_NOT_AVAILABLE;
}
-} // namespace metal
+} // namespace metal
} // namespace gfx
diff --git a/tools/gfx/metal/metal-swap-chain.h b/tools/gfx/metal/metal-swap-chain.h
index b7d57e271..957db1ad9 100644
--- a/tools/gfx/metal/metal-swap-chain.h
+++ b/tools/gfx/metal/metal-swap-chain.h
@@ -14,9 +14,7 @@ using namespace Slang;
namespace metal
{
-class SwapchainImpl
- : public ISwapchain
- , public ComObject
+class SwapchainImpl : public ISwapchain, public ComObject
{
public:
SLANG_COM_OBJECT_IUNKNOWN_ALL
@@ -42,7 +40,7 @@ public:
virtual SLANG_NO_THROW const Desc& SLANG_MCALL getDesc() override { return m_desc; }
virtual SLANG_NO_THROW Result SLANG_MCALL
- getImage(GfxIndex index, ITextureResource** outResource) override;
+ getImage(GfxIndex index, ITextureResource** outResource) override;
virtual SLANG_NO_THROW Result SLANG_MCALL resize(GfxCount width, GfxCount height) override;
virtual SLANG_NO_THROW Result SLANG_MCALL present() override;
virtual SLANG_NO_THROW int SLANG_MCALL acquireNextImage() override;
diff --git a/tools/gfx/metal/metal-texture.cpp b/tools/gfx/metal/metal-texture.cpp
index 81625aa7e..996a0b333 100644
--- a/tools/gfx/metal/metal-texture.cpp
+++ b/tools/gfx/metal/metal-texture.cpp
@@ -1,5 +1,6 @@
// metal-texture.cpp
#include "metal-texture.h"
+
#include "metal-util.h"
namespace gfx
@@ -11,14 +12,12 @@ namespace metal
{
TextureResourceImpl::TextureResourceImpl(const Desc& desc, DeviceImpl* device)
- : Parent(desc)
- , m_device(device)
-{}
-
-TextureResourceImpl::~TextureResourceImpl()
+ : Parent(desc), m_device(device)
{
}
+TextureResourceImpl::~TextureResourceImpl() {}
+
Result TextureResourceImpl::getNativeResourceHandle(InteropHandle* outHandle)
{
outHandle->api = InteropHandleAPI::Metal;
diff --git a/tools/gfx/metal/metal-texture.h b/tools/gfx/metal/metal-texture.h
index aff49beb6..fe923e965 100644
--- a/tools/gfx/metal/metal-texture.h
+++ b/tools/gfx/metal/metal-texture.h
@@ -25,7 +25,8 @@ public:
MTL::TextureType m_textureType;
MTL::PixelFormat m_pixelFormat;
- virtual SLANG_NO_THROW Result SLANG_MCALL getNativeResourceHandle(InteropHandle* outHandle) override;
+ virtual SLANG_NO_THROW Result SLANG_MCALL
+ getNativeResourceHandle(InteropHandle* outHandle) override;
virtual SLANG_NO_THROW Result SLANG_MCALL getSharedHandle(InteropHandle* outHandle) override;
diff --git a/tools/gfx/metal/metal-transient-heap.cpp b/tools/gfx/metal/metal-transient-heap.cpp
index 8810897dd..16c883f67 100644
--- a/tools/gfx/metal/metal-transient-heap.cpp
+++ b/tools/gfx/metal/metal-transient-heap.cpp
@@ -22,9 +22,7 @@ Result TransientResourceHeapImpl::init(const ITransientResourceHeap::Desc& desc,
return SLANG_OK;
}
-TransientResourceHeapImpl::~TransientResourceHeapImpl()
-{
-}
+TransientResourceHeapImpl::~TransientResourceHeapImpl() {}
Result TransientResourceHeapImpl::createCommandBuffer(ICommandBuffer** outCmdBuffer)
{
diff --git a/tools/gfx/metal/metal-transient-heap.h b/tools/gfx/metal/metal-transient-heap.h
index 4b3f6dee9..963b5bd1b 100644
--- a/tools/gfx/metal/metal-transient-heap.h
+++ b/tools/gfx/metal/metal-transient-heap.h
@@ -27,7 +27,7 @@ public:
public:
virtual SLANG_NO_THROW Result SLANG_MCALL
- createCommandBuffer(ICommandBuffer** outCommandBuffer) override;
+ createCommandBuffer(ICommandBuffer** outCommandBuffer) override;
virtual SLANG_NO_THROW Result SLANG_MCALL synchronizeAndReset() override;
};
diff --git a/tools/gfx/metal/metal-util.cpp b/tools/gfx/metal/metal-util.cpp
index ed96eb487..fd2e9e009 100644
--- a/tools/gfx/metal/metal-util.cpp
+++ b/tools/gfx/metal/metal-util.cpp
@@ -1,117 +1,119 @@
// metal-util.cpp
#include "metal-util.h"
+
#include "core/slang-math.h"
-#include <stdlib.h>
#include <stdio.h>
+#include <stdlib.h>
-namespace gfx {
+namespace gfx
+{
MTL::PixelFormat MetalUtil::translatePixelFormat(Format format)
{
switch (format)
{
- case Format::R32G32B32A32_TYPELESS: return MTL::PixelFormatRGBA32Float;
- case Format::R32G32B32_TYPELESS: return MTL::PixelFormatInvalid;
- case Format::R32G32_TYPELESS: return MTL::PixelFormatRG32Float;
- case Format::R32_TYPELESS: return MTL::PixelFormatR32Float;
-
- case Format::R16G16B16A16_TYPELESS: return MTL::PixelFormatRGBA16Float;
- case Format::R16G16_TYPELESS: return MTL::PixelFormatRG16Float;
- case Format::R16_TYPELESS: return MTL::PixelFormatR16Float;
-
- case Format::R8G8B8A8_TYPELESS: return MTL::PixelFormatRGBA8Unorm;
- case Format::R8G8_TYPELESS: return MTL::PixelFormatRG8Unorm;
- case Format::R8_TYPELESS: return MTL::PixelFormatR8Unorm;
- case Format::B8G8R8A8_TYPELESS: return MTL::PixelFormatBGRA8Unorm;
-
- case Format::R32G32B32A32_FLOAT: return MTL::PixelFormatRGBA32Float;
- case Format::R32G32B32_FLOAT: return MTL::PixelFormatInvalid;
- case Format::R32G32_FLOAT: return MTL::PixelFormatRG32Float;
- case Format::R32_FLOAT: return MTL::PixelFormatR32Float;
-
- case Format::R16G16B16A16_FLOAT: return MTL::PixelFormatRGBA16Float;
- case Format::R16G16_FLOAT: return MTL::PixelFormatRG16Float;
- case Format::R16_FLOAT: return MTL::PixelFormatR16Float;
-
- case Format::R32G32B32A32_UINT: return MTL::PixelFormatRGBA32Uint;
- case Format::R32G32B32_UINT: return MTL::PixelFormatInvalid;
- case Format::R32G32_UINT: return MTL::PixelFormatRG32Uint;
- case Format::R32_UINT: return MTL::PixelFormatR32Uint;
-
- case Format::R16G16B16A16_UINT: return MTL::PixelFormatRGBA16Uint;
- case Format::R16G16_UINT: return MTL::PixelFormatRG16Uint;
- case Format::R16_UINT: return MTL::PixelFormatR16Uint;
-
- case Format::R8G8B8A8_UINT: return MTL::PixelFormatRGBA8Uint;
- case Format::R8G8_UINT: return MTL::PixelFormatRG8Uint;
- case Format::R8_UINT: return MTL::PixelFormatR8Uint;
-
- case Format::R32G32B32A32_SINT: return MTL::PixelFormatRGBA32Sint;
- case Format::R32G32B32_SINT: return MTL::PixelFormatInvalid;
- case Format::R32G32_SINT: return MTL::PixelFormatRG32Sint;
- case Format::R32_SINT: return MTL::PixelFormatR32Sint;
-
- case Format::R16G16B16A16_SINT: return MTL::PixelFormatRGBA16Sint;
- case Format::R16G16_SINT: return MTL::PixelFormatRG16Sint;
- case Format::R16_SINT: return MTL::PixelFormatR16Sint;
-
- case Format::R8G8B8A8_SINT: return MTL::PixelFormatRGBA8Sint;
- case Format::R8G8_SINT: return MTL::PixelFormatRG8Sint;
- case Format::R8_SINT: return MTL::PixelFormatR8Sint;
-
- case Format::R16G16B16A16_UNORM: return MTL::PixelFormatRGBA16Unorm;
- case Format::R16G16_UNORM: return MTL::PixelFormatRG16Unorm;
- case Format::R16_UNORM: return MTL::PixelFormatR16Unorm;
-
- case Format::R8G8B8A8_UNORM: return MTL::PixelFormatRGBA8Unorm;
- case Format::R8G8B8A8_UNORM_SRGB: return MTL::PixelFormatRGBA8Unorm_sRGB;
- case Format::R8G8_UNORM: return MTL::PixelFormatRG8Unorm;
- case Format::R8_UNORM: return MTL::PixelFormatR8Unorm;
- case Format::B8G8R8A8_UNORM: return MTL::PixelFormatBGRA8Unorm;
- case Format::B8G8R8A8_UNORM_SRGB: return MTL::PixelFormatBGRA8Unorm_sRGB;
- case Format::B8G8R8X8_UNORM: return MTL::PixelFormatInvalid;
- case Format::B8G8R8X8_UNORM_SRGB: return MTL::PixelFormatInvalid;
-
- case Format::R16G16B16A16_SNORM: return MTL::PixelFormatRGBA16Snorm;
- case Format::R16G16_SNORM: return MTL::PixelFormatRG16Snorm;
- case Format::R16_SNORM: return MTL::PixelFormatR16Snorm;
-
- case Format::R8G8B8A8_SNORM: return MTL::PixelFormatRGBA8Snorm;
- case Format::R8G8_SNORM: return MTL::PixelFormatRG8Snorm;
- case Format::R8_SNORM: return MTL::PixelFormatR8Snorm;
-
- case Format::D32_FLOAT: return MTL::PixelFormatDepth32Float;
- case Format::D16_UNORM: return MTL::PixelFormatDepth16Unorm;
- case Format::D32_FLOAT_S8_UINT: return MTL::PixelFormatDepth32Float_Stencil8;
- case Format::R32_FLOAT_X32_TYPELESS: return MTL::PixelFormatInvalid;
-
- case Format::B4G4R4A4_UNORM: return MTL::PixelFormatABGR4Unorm;
- case Format::B5G6R5_UNORM: return MTL::PixelFormatB5G6R5Unorm;
- case Format::B5G5R5A1_UNORM: return MTL::PixelFormatA1BGR5Unorm;
-
- case Format::R9G9B9E5_SHAREDEXP: return MTL::PixelFormatRGB9E5Float;
- case Format::R10G10B10A2_TYPELESS: return MTL::PixelFormatInvalid;
- case Format::R10G10B10A2_UINT: return MTL::PixelFormatRGB10A2Uint;
- case Format::R10G10B10A2_UNORM: return MTL::PixelFormatRGB10A2Unorm;
- case Format::R11G11B10_FLOAT: return MTL::PixelFormatRG11B10Float;
-
- case Format::BC1_UNORM: return MTL::PixelFormatBC1_RGBA;
- case Format::BC1_UNORM_SRGB: return MTL::PixelFormatBC1_RGBA_sRGB;
- case Format::BC2_UNORM: return MTL::PixelFormatBC2_RGBA;
- case Format::BC2_UNORM_SRGB: return MTL::PixelFormatBC2_RGBA_sRGB;
- case Format::BC3_UNORM: return MTL::PixelFormatBC3_RGBA;
- case Format::BC3_UNORM_SRGB: return MTL::PixelFormatBC3_RGBA_sRGB;
- case Format::BC4_UNORM: return MTL::PixelFormatBC4_RUnorm;
- case Format::BC4_SNORM: return MTL::PixelFormatBC4_RSnorm;
- case Format::BC5_UNORM: return MTL::PixelFormatBC5_RGUnorm;
- case Format::BC5_SNORM: return MTL::PixelFormatBC5_RGSnorm;
- case Format::BC6H_UF16: return MTL::PixelFormatBC6H_RGBUfloat;
- case Format::BC6H_SF16: return MTL::PixelFormatBC6H_RGBFloat;
- case Format::BC7_UNORM: return MTL::PixelFormatBC7_RGBAUnorm;
- case Format::BC7_UNORM_SRGB: return MTL::PixelFormatBC7_RGBAUnorm_sRGB;
-
- default: return MTL::PixelFormatInvalid;
+ case Format::R32G32B32A32_TYPELESS: return MTL::PixelFormatRGBA32Float;
+ case Format::R32G32B32_TYPELESS: return MTL::PixelFormatInvalid;
+ case Format::R32G32_TYPELESS: return MTL::PixelFormatRG32Float;
+ case Format::R32_TYPELESS: return MTL::PixelFormatR32Float;
+
+ case Format::R16G16B16A16_TYPELESS: return MTL::PixelFormatRGBA16Float;
+ case Format::R16G16_TYPELESS: return MTL::PixelFormatRG16Float;
+ case Format::R16_TYPELESS: return MTL::PixelFormatR16Float;
+
+ case Format::R8G8B8A8_TYPELESS: return MTL::PixelFormatRGBA8Unorm;
+ case Format::R8G8_TYPELESS: return MTL::PixelFormatRG8Unorm;
+ case Format::R8_TYPELESS: return MTL::PixelFormatR8Unorm;
+ case Format::B8G8R8A8_TYPELESS: return MTL::PixelFormatBGRA8Unorm;
+
+ case Format::R32G32B32A32_FLOAT: return MTL::PixelFormatRGBA32Float;
+ case Format::R32G32B32_FLOAT: return MTL::PixelFormatInvalid;
+ case Format::R32G32_FLOAT: return MTL::PixelFormatRG32Float;
+ case Format::R32_FLOAT: return MTL::PixelFormatR32Float;
+
+ case Format::R16G16B16A16_FLOAT: return MTL::PixelFormatRGBA16Float;
+ case Format::R16G16_FLOAT: return MTL::PixelFormatRG16Float;
+ case Format::R16_FLOAT: return MTL::PixelFormatR16Float;
+
+ case Format::R32G32B32A32_UINT: return MTL::PixelFormatRGBA32Uint;
+ case Format::R32G32B32_UINT: return MTL::PixelFormatInvalid;
+ case Format::R32G32_UINT: return MTL::PixelFormatRG32Uint;
+ case Format::R32_UINT: return MTL::PixelFormatR32Uint;
+
+ case Format::R16G16B16A16_UINT: return MTL::PixelFormatRGBA16Uint;
+ case Format::R16G16_UINT: return MTL::PixelFormatRG16Uint;
+ case Format::R16_UINT: return MTL::PixelFormatR16Uint;
+
+ case Format::R8G8B8A8_UINT: return MTL::PixelFormatRGBA8Uint;
+ case Format::R8G8_UINT: return MTL::PixelFormatRG8Uint;
+ case Format::R8_UINT: return MTL::PixelFormatR8Uint;
+
+ case Format::R32G32B32A32_SINT: return MTL::PixelFormatRGBA32Sint;
+ case Format::R32G32B32_SINT: return MTL::PixelFormatInvalid;
+ case Format::R32G32_SINT: return MTL::PixelFormatRG32Sint;
+ case Format::R32_SINT: return MTL::PixelFormatR32Sint;
+
+ case Format::R16G16B16A16_SINT: return MTL::PixelFormatRGBA16Sint;
+ case Format::R16G16_SINT: return MTL::PixelFormatRG16Sint;
+ case Format::R16_SINT: return MTL::PixelFormatR16Sint;
+
+ case Format::R8G8B8A8_SINT: return MTL::PixelFormatRGBA8Sint;
+ case Format::R8G8_SINT: return MTL::PixelFormatRG8Sint;
+ case Format::R8_SINT: return MTL::PixelFormatR8Sint;
+
+ case Format::R16G16B16A16_UNORM: return MTL::PixelFormatRGBA16Unorm;
+ case Format::R16G16_UNORM: return MTL::PixelFormatRG16Unorm;
+ case Format::R16_UNORM: return MTL::PixelFormatR16Unorm;
+
+ case Format::R8G8B8A8_UNORM: return MTL::PixelFormatRGBA8Unorm;
+ case Format::R8G8B8A8_UNORM_SRGB: return MTL::PixelFormatRGBA8Unorm_sRGB;
+ case Format::R8G8_UNORM: return MTL::PixelFormatRG8Unorm;
+ case Format::R8_UNORM: return MTL::PixelFormatR8Unorm;
+ case Format::B8G8R8A8_UNORM: return MTL::PixelFormatBGRA8Unorm;
+ case Format::B8G8R8A8_UNORM_SRGB: return MTL::PixelFormatBGRA8Unorm_sRGB;
+ case Format::B8G8R8X8_UNORM: return MTL::PixelFormatInvalid;
+ case Format::B8G8R8X8_UNORM_SRGB: return MTL::PixelFormatInvalid;
+
+ case Format::R16G16B16A16_SNORM: return MTL::PixelFormatRGBA16Snorm;
+ case Format::R16G16_SNORM: return MTL::PixelFormatRG16Snorm;
+ case Format::R16_SNORM: return MTL::PixelFormatR16Snorm;
+
+ case Format::R8G8B8A8_SNORM: return MTL::PixelFormatRGBA8Snorm;
+ case Format::R8G8_SNORM: return MTL::PixelFormatRG8Snorm;
+ case Format::R8_SNORM: return MTL::PixelFormatR8Snorm;
+
+ case Format::D32_FLOAT: return MTL::PixelFormatDepth32Float;
+ case Format::D16_UNORM: return MTL::PixelFormatDepth16Unorm;
+ case Format::D32_FLOAT_S8_UINT: return MTL::PixelFormatDepth32Float_Stencil8;
+ case Format::R32_FLOAT_X32_TYPELESS: return MTL::PixelFormatInvalid;
+
+ case Format::B4G4R4A4_UNORM: return MTL::PixelFormatABGR4Unorm;
+ case Format::B5G6R5_UNORM: return MTL::PixelFormatB5G6R5Unorm;
+ case Format::B5G5R5A1_UNORM: return MTL::PixelFormatA1BGR5Unorm;
+
+ case Format::R9G9B9E5_SHAREDEXP: return MTL::PixelFormatRGB9E5Float;
+ case Format::R10G10B10A2_TYPELESS: return MTL::PixelFormatInvalid;
+ case Format::R10G10B10A2_UINT: return MTL::PixelFormatRGB10A2Uint;
+ case Format::R10G10B10A2_UNORM: return MTL::PixelFormatRGB10A2Unorm;
+ case Format::R11G11B10_FLOAT: return MTL::PixelFormatRG11B10Float;
+
+ case Format::BC1_UNORM: return MTL::PixelFormatBC1_RGBA;
+ case Format::BC1_UNORM_SRGB: return MTL::PixelFormatBC1_RGBA_sRGB;
+ case Format::BC2_UNORM: return MTL::PixelFormatBC2_RGBA;
+ case Format::BC2_UNORM_SRGB: return MTL::PixelFormatBC2_RGBA_sRGB;
+ case Format::BC3_UNORM: return MTL::PixelFormatBC3_RGBA;
+ case Format::BC3_UNORM_SRGB: return MTL::PixelFormatBC3_RGBA_sRGB;
+ case Format::BC4_UNORM: return MTL::PixelFormatBC4_RUnorm;
+ case Format::BC4_SNORM: return MTL::PixelFormatBC4_RSnorm;
+ case Format::BC5_UNORM: return MTL::PixelFormatBC5_RGUnorm;
+ case Format::BC5_SNORM: return MTL::PixelFormatBC5_RGSnorm;
+ case Format::BC6H_UF16: return MTL::PixelFormatBC6H_RGBUfloat;
+ case Format::BC6H_SF16: return MTL::PixelFormatBC6H_RGBFloat;
+ case Format::BC7_UNORM: return MTL::PixelFormatBC7_RGBAUnorm;
+ case Format::BC7_UNORM_SRGB: return MTL::PixelFormatBC7_RGBAUnorm_sRGB;
+
+ default: return MTL::PixelFormatInvalid;
}
}
@@ -119,60 +121,60 @@ MTL::VertexFormat MetalUtil::translateVertexFormat(Format format)
{
switch (format)
{
- case Format::R8G8_UINT: return MTL::VertexFormatUChar2;
+ case Format::R8G8_UINT: return MTL::VertexFormatUChar2;
// VertexFormatUChar3
- case Format::R8G8B8A8_UINT: return MTL::VertexFormatUChar4;
- case Format::R8G8_SINT: return MTL::VertexFormatChar2;
+ case Format::R8G8B8A8_UINT: return MTL::VertexFormatUChar4;
+ case Format::R8G8_SINT: return MTL::VertexFormatChar2;
// return VertexFormatChar3
- case Format::R8G8B8A8_SINT: return MTL::VertexFormatChar4;
- case Format::R8G8_UNORM: return MTL::VertexFormatUChar2Normalized;
+ case Format::R8G8B8A8_SINT: return MTL::VertexFormatChar4;
+ case Format::R8G8_UNORM: return MTL::VertexFormatUChar2Normalized;
// return VertexFormatUChar3Normalized;
- case Format::R8G8B8A8_UNORM: return MTL::VertexFormatUChar4Normalized;
- case Format::R8G8_SNORM: return MTL::VertexFormatChar2Normalized;
+ case Format::R8G8B8A8_UNORM: return MTL::VertexFormatUChar4Normalized;
+ case Format::R8G8_SNORM: return MTL::VertexFormatChar2Normalized;
// return VertexFormatChar3Normalized
- case Format::R8G8B8A8_SNORM: return MTL::VertexFormatChar4Normalized;
- case Format::R16G16_UINT: return MTL::VertexFormatUShort2;
+ case Format::R8G8B8A8_SNORM: return MTL::VertexFormatChar4Normalized;
+ case Format::R16G16_UINT: return MTL::VertexFormatUShort2;
// return VertexFormatUShort3;
- case Format::R16G16B16A16_UINT: return MTL::VertexFormatUShort4;
- case Format::R16G16_SINT: return MTL::VertexFormatShort2;
+ case Format::R16G16B16A16_UINT: return MTL::VertexFormatUShort4;
+ case Format::R16G16_SINT: return MTL::VertexFormatShort2;
// return VertexFormatShort3;
- case Format::R16G16B16A16_SINT: return MTL::VertexFormatShort4;
- case Format::R16G16_UNORM: return MTL::VertexFormatUShort2Normalized;
+ case Format::R16G16B16A16_SINT: return MTL::VertexFormatShort4;
+ case Format::R16G16_UNORM: return MTL::VertexFormatUShort2Normalized;
// return VertexFormatUShort3Normalized;
- case Format::R16G16B16A16_UNORM: return MTL::VertexFormatUShort4Normalized;
- case Format::R16G16_SNORM: return MTL::VertexFormatShort2Normalized;
+ case Format::R16G16B16A16_UNORM: return MTL::VertexFormatUShort4Normalized;
+ case Format::R16G16_SNORM: return MTL::VertexFormatShort2Normalized;
// return VertexFormatShort3Normalized;
- case Format::R16G16B16A16_SNORM: return MTL::VertexFormatShort4Normalized;
- case Format::R16G16_FLOAT: return MTL::VertexFormatHalf2;
+ case Format::R16G16B16A16_SNORM: return MTL::VertexFormatShort4Normalized;
+ case Format::R16G16_FLOAT: return MTL::VertexFormatHalf2;
// return VertexFormatHalf3;
- case Format::R16G16B16A16_FLOAT: return MTL::VertexFormatHalf4;
- case Format::R32_FLOAT: return MTL::VertexFormatFloat;
- case Format::R32G32_FLOAT: return MTL::VertexFormatFloat2;
- case Format::R32G32B32_FLOAT: return MTL::VertexFormatFloat3;
- case Format::R32G32B32A32_FLOAT: return MTL::VertexFormatFloat4;
- case Format::R32_SINT: return MTL::VertexFormatInt;
- case Format::R32G32_SINT: return MTL::VertexFormatInt2;
- case Format::R32G32B32_SINT: return MTL::VertexFormatInt3;
- case Format::R32G32B32A32_SINT: return MTL::VertexFormatInt4;
- case Format::R32_UINT: return MTL::VertexFormatUInt;
- case Format::R32G32_UINT: return MTL::VertexFormatUInt2;
- case Format::R32G32B32_UINT: return MTL::VertexFormatUInt3;
- case Format::R32G32B32A32_UINT: return MTL::VertexFormatUInt4;
+ case Format::R16G16B16A16_FLOAT: return MTL::VertexFormatHalf4;
+ case Format::R32_FLOAT: return MTL::VertexFormatFloat;
+ case Format::R32G32_FLOAT: return MTL::VertexFormatFloat2;
+ case Format::R32G32B32_FLOAT: return MTL::VertexFormatFloat3;
+ case Format::R32G32B32A32_FLOAT: return MTL::VertexFormatFloat4;
+ case Format::R32_SINT: return MTL::VertexFormatInt;
+ case Format::R32G32_SINT: return MTL::VertexFormatInt2;
+ case Format::R32G32B32_SINT: return MTL::VertexFormatInt3;
+ case Format::R32G32B32A32_SINT: return MTL::VertexFormatInt4;
+ case Format::R32_UINT: return MTL::VertexFormatUInt;
+ case Format::R32G32_UINT: return MTL::VertexFormatUInt2;
+ case Format::R32G32B32_UINT: return MTL::VertexFormatUInt3;
+ case Format::R32G32B32A32_UINT: return MTL::VertexFormatUInt4;
// return VertexFormatInt1010102Normalized;
- case Format::R10G10B10A2_UNORM: return MTL::VertexFormatUInt1010102Normalized;
- case Format::B4G4R4A4_UNORM: return MTL::VertexFormatUChar4Normalized_BGRA;
- case Format::R8_UINT: return MTL::VertexFormatUChar;
- case Format::R8_SINT: return MTL::VertexFormatChar;
- case Format::R8_UNORM: return MTL::VertexFormatUCharNormalized;
- case Format::R8_SNORM: return MTL::VertexFormatCharNormalized;
- case Format::R16_UINT: return MTL::VertexFormatUShort;
- case Format::R16_SINT: return MTL::VertexFormatShort;
- case Format::R16_UNORM: return MTL::VertexFormatUShortNormalized;
- case Format::R16_SNORM: return MTL::VertexFormatShortNormalized;
- case Format::R16_FLOAT: return MTL::VertexFormatHalf;
- case Format::R11G11B10_FLOAT: return MTL::VertexFormatFloatRG11B10;
- case Format::R9G9B9E5_SHAREDEXP: return MTL::VertexFormatFloatRGB9E5;
- default: return MTL::VertexFormatInvalid;
+ case Format::R10G10B10A2_UNORM: return MTL::VertexFormatUInt1010102Normalized;
+ case Format::B4G4R4A4_UNORM: return MTL::VertexFormatUChar4Normalized_BGRA;
+ case Format::R8_UINT: return MTL::VertexFormatUChar;
+ case Format::R8_SINT: return MTL::VertexFormatChar;
+ case Format::R8_UNORM: return MTL::VertexFormatUCharNormalized;
+ case Format::R8_SNORM: return MTL::VertexFormatCharNormalized;
+ case Format::R16_UINT: return MTL::VertexFormatUShort;
+ case Format::R16_SINT: return MTL::VertexFormatShort;
+ case Format::R16_UNORM: return MTL::VertexFormatUShortNormalized;
+ case Format::R16_SNORM: return MTL::VertexFormatShortNormalized;
+ case Format::R16_FLOAT: return MTL::VertexFormatHalf;
+ case Format::R11G11B10_FLOAT: return MTL::VertexFormatFloatRG11B10;
+ case Format::R9G9B9E5_SHAREDEXP: return MTL::VertexFormatFloatRGB9E5;
+ default: return MTL::VertexFormatInvalid;
}
}
@@ -183,10 +185,8 @@ bool MetalUtil::isDepthFormat(MTL::PixelFormat format)
case MTL::PixelFormatDepth16Unorm:
case MTL::PixelFormatDepth32Float:
case MTL::PixelFormatDepth24Unorm_Stencil8:
- case MTL::PixelFormatDepth32Float_Stencil8:
- return true;
- default:
- return false;
+ case MTL::PixelFormatDepth32Float_Stencil8: return true;
+ default: return false;
}
}
@@ -198,10 +198,8 @@ bool MetalUtil::isStencilFormat(MTL::PixelFormat format)
case MTL::PixelFormatDepth24Unorm_Stencil8:
case MTL::PixelFormatDepth32Float_Stencil8:
case MTL::PixelFormatX32_Stencil8:
- case MTL::PixelFormatX24_Stencil8:
- return true;
- default:
- return false;
+ case MTL::PixelFormatX24_Stencil8: return true;
+ default: return false;
}
}
@@ -209,12 +207,9 @@ MTL::SamplerMinMagFilter MetalUtil::translateSamplerMinMagFilter(TextureFilterin
{
switch (mode)
{
- case TextureFilteringMode::Point:
- return MTL::SamplerMinMagFilterNearest;
- case TextureFilteringMode::Linear:
- return MTL::SamplerMinMagFilterLinear;
- default:
- return MTL::SamplerMinMagFilter(0);
+ case TextureFilteringMode::Point: return MTL::SamplerMinMagFilterNearest;
+ case TextureFilteringMode::Linear: return MTL::SamplerMinMagFilterLinear;
+ default: return MTL::SamplerMinMagFilter(0);
}
}
@@ -222,31 +217,22 @@ MTL::SamplerMipFilter MetalUtil::translateSamplerMipFilter(TextureFilteringMode
{
switch (mode)
{
- case TextureFilteringMode::Point:
- return MTL::SamplerMipFilterNearest;
- case TextureFilteringMode::Linear:
- return MTL::SamplerMipFilterLinear;
- default:
- return MTL::SamplerMipFilter(0);
- }
+ case TextureFilteringMode::Point: return MTL::SamplerMipFilterNearest;
+ case TextureFilteringMode::Linear: return MTL::SamplerMipFilterLinear;
+ default: return MTL::SamplerMipFilter(0);
+ }
}
MTL::SamplerAddressMode MetalUtil::translateSamplerAddressMode(TextureAddressingMode mode)
{
switch (mode)
{
- case TextureAddressingMode::Wrap:
- return MTL::SamplerAddressModeRepeat;
- case TextureAddressingMode::ClampToEdge:
- return MTL::SamplerAddressModeClampToEdge;
- case TextureAddressingMode::ClampToBorder:
- return MTL::SamplerAddressModeClampToBorderColor;
- case TextureAddressingMode::MirrorRepeat:
- return MTL::SamplerAddressModeMirrorRepeat;
- case TextureAddressingMode::MirrorOnce:
- return MTL::SamplerAddressModeMirrorClampToEdge;
- default:
- return MTL::SamplerAddressMode(0);
+ case TextureAddressingMode::Wrap: return MTL::SamplerAddressModeRepeat;
+ case TextureAddressingMode::ClampToEdge: return MTL::SamplerAddressModeClampToEdge;
+ case TextureAddressingMode::ClampToBorder: return MTL::SamplerAddressModeClampToBorderColor;
+ case TextureAddressingMode::MirrorRepeat: return MTL::SamplerAddressModeMirrorRepeat;
+ case TextureAddressingMode::MirrorOnce: return MTL::SamplerAddressModeMirrorClampToEdge;
+ default: return MTL::SamplerAddressMode(0);
}
}
@@ -254,24 +240,15 @@ MTL::CompareFunction MetalUtil::translateCompareFunction(ComparisonFunc func)
{
switch (func)
{
- case ComparisonFunc::Never:
- return MTL::CompareFunctionNever;
- case ComparisonFunc::Less:
- return MTL::CompareFunctionLess;
- case ComparisonFunc::Equal:
- return MTL::CompareFunctionEqual;
- case ComparisonFunc::LessEqual:
- return MTL::CompareFunctionLessEqual;
- case ComparisonFunc::Greater:
- return MTL::CompareFunctionGreater;
- case ComparisonFunc::NotEqual:
- return MTL::CompareFunctionNotEqual;
- case ComparisonFunc::GreaterEqual:
- return MTL::CompareFunctionGreaterEqual;
- case ComparisonFunc::Always:
- return MTL::CompareFunctionAlways;
- default:
- return MTL::CompareFunction(0);
+ case ComparisonFunc::Never: return MTL::CompareFunctionNever;
+ case ComparisonFunc::Less: return MTL::CompareFunctionLess;
+ case ComparisonFunc::Equal: return MTL::CompareFunctionEqual;
+ case ComparisonFunc::LessEqual: return MTL::CompareFunctionLessEqual;
+ case ComparisonFunc::Greater: return MTL::CompareFunctionGreater;
+ case ComparisonFunc::NotEqual: return MTL::CompareFunctionNotEqual;
+ case ComparisonFunc::GreaterEqual: return MTL::CompareFunctionGreaterEqual;
+ case ComparisonFunc::Always: return MTL::CompareFunctionAlways;
+ default: return MTL::CompareFunction(0);
}
}
@@ -279,24 +256,15 @@ MTL::StencilOperation MetalUtil::translateStencilOperation(StencilOp op)
{
switch (op)
{
- case StencilOp::Keep:
- return MTL::StencilOperationKeep;
- case StencilOp::Zero:
- return MTL::StencilOperationZero;
- case StencilOp::Replace:
- return MTL::StencilOperationReplace;
- case StencilOp::IncrementSaturate:
- return MTL::StencilOperationIncrementClamp;
- case StencilOp::DecrementSaturate:
- return MTL::StencilOperationDecrementClamp;
- case StencilOp::Invert:
- return MTL::StencilOperationInvert;
- case StencilOp::IncrementWrap:
- return MTL::StencilOperationIncrementWrap;
- case StencilOp::DecrementWrap:
- return MTL::StencilOperationDecrementWrap;
- default:
- return MTL::StencilOperation(0);
+ case StencilOp::Keep: return MTL::StencilOperationKeep;
+ case StencilOp::Zero: return MTL::StencilOperationZero;
+ case StencilOp::Replace: return MTL::StencilOperationReplace;
+ case StencilOp::IncrementSaturate: return MTL::StencilOperationIncrementClamp;
+ case StencilOp::DecrementSaturate: return MTL::StencilOperationDecrementClamp;
+ case StencilOp::Invert: return MTL::StencilOperationInvert;
+ case StencilOp::IncrementWrap: return MTL::StencilOperationIncrementWrap;
+ case StencilOp::DecrementWrap: return MTL::StencilOperationDecrementWrap;
+ default: return MTL::StencilOperation(0);
}
}
@@ -304,12 +272,9 @@ MTL::VertexStepFunction MetalUtil::translateVertexStepFunction(InputSlotClass sl
{
switch (slotClass)
{
- case InputSlotClass::PerVertex:
- return MTL::VertexStepFunctionPerVertex;
- case InputSlotClass::PerInstance:
- return MTL::VertexStepFunctionPerInstance;
- default:
- return MTL::VertexStepFunctionPerVertex;
+ case InputSlotClass::PerVertex: return MTL::VertexStepFunctionPerVertex;
+ case InputSlotClass::PerInstance: return MTL::VertexStepFunctionPerInstance;
+ default: return MTL::VertexStepFunctionPerVertex;
}
}
@@ -317,18 +282,12 @@ MTL::PrimitiveType MetalUtil::translatePrimitiveType(PrimitiveTopology topology)
{
switch (topology)
{
- case PrimitiveTopology::TriangleList:
- return MTL::PrimitiveTypeTriangle;
- case PrimitiveTopology::TriangleStrip:
- return MTL::PrimitiveTypeTriangleStrip;
- case PrimitiveTopology::PointList:
- return MTL::PrimitiveTypePoint;
- case PrimitiveTopology::LineList:
- return MTL::PrimitiveTypeLine;
- case PrimitiveTopology::LineStrip:
- return MTL::PrimitiveTypeLineStrip;
- default:
- return MTL::PrimitiveType(0);
+ case PrimitiveTopology::TriangleList: return MTL::PrimitiveTypeTriangle;
+ case PrimitiveTopology::TriangleStrip: return MTL::PrimitiveTypeTriangleStrip;
+ case PrimitiveTopology::PointList: return MTL::PrimitiveTypePoint;
+ case PrimitiveTopology::LineList: return MTL::PrimitiveTypeLine;
+ case PrimitiveTopology::LineStrip: return MTL::PrimitiveTypeLineStrip;
+ default: return MTL::PrimitiveType(0);
}
}
@@ -336,15 +295,11 @@ MTL::PrimitiveTopologyClass MetalUtil::translatePrimitiveTopologyClass(Primitive
{
switch (type)
{
- case PrimitiveType::Point:
- return MTL::PrimitiveTopologyClassPoint;
- case PrimitiveType::Line:
- return MTL::PrimitiveTopologyClassLine;
- case PrimitiveType::Triangle:
- return MTL::PrimitiveTopologyClassTriangle;
+ case PrimitiveType::Point: return MTL::PrimitiveTopologyClassPoint;
+ case PrimitiveType::Line: return MTL::PrimitiveTopologyClassLine;
+ case PrimitiveType::Triangle: return MTL::PrimitiveTopologyClassTriangle;
case PrimitiveType::Patch:
- default:
- return MTL::PrimitiveTopologyClassUnspecified;
+ default: return MTL::PrimitiveTopologyClassUnspecified;
}
}
@@ -352,42 +307,24 @@ MTL::BlendFactor MetalUtil::translateBlendFactor(BlendFactor factor)
{
switch (factor)
{
- case BlendFactor::Zero:
- return MTL::BlendFactorZero;
- case BlendFactor::One:
- return MTL::BlendFactorOne;
- case BlendFactor::SrcColor:
- return MTL::BlendFactorSourceColor;
- case BlendFactor::InvSrcColor:
- return MTL::BlendFactorOneMinusSourceColor;
- case BlendFactor::SrcAlpha:
- return MTL::BlendFactorSourceAlpha;
- case BlendFactor::InvSrcAlpha:
- return MTL::BlendFactorOneMinusSourceAlpha;
- case BlendFactor::DestAlpha:
- return MTL::BlendFactorDestinationAlpha;
- case BlendFactor::InvDestAlpha:
- return MTL::BlendFactorOneMinusDestinationAlpha;
- case BlendFactor::DestColor:
- return MTL::BlendFactorDestinationColor;
- case BlendFactor::InvDestColor:
- return MTL::BlendFactorOneMinusDestinationColor;
- case BlendFactor::SrcAlphaSaturate:
- return MTL::BlendFactorSourceAlphaSaturated;
- case BlendFactor::BlendColor:
- return MTL::BlendFactorBlendColor;
- case BlendFactor::InvBlendColor:
- return MTL::BlendFactorOneMinusBlendColor;
- case BlendFactor::SecondarySrcColor:
- return MTL::BlendFactorSource1Color;
- case BlendFactor::InvSecondarySrcColor:
- return MTL::BlendFactorOneMinusSource1Color;
- case BlendFactor::SecondarySrcAlpha:
- return MTL::BlendFactorSource1Alpha;
- case BlendFactor::InvSecondarySrcAlpha:
- return MTL::BlendFactorOneMinusSource1Alpha;
- default:
- return MTL::BlendFactor(0);
+ case BlendFactor::Zero: return MTL::BlendFactorZero;
+ case BlendFactor::One: return MTL::BlendFactorOne;
+ case BlendFactor::SrcColor: return MTL::BlendFactorSourceColor;
+ case BlendFactor::InvSrcColor: return MTL::BlendFactorOneMinusSourceColor;
+ case BlendFactor::SrcAlpha: return MTL::BlendFactorSourceAlpha;
+ case BlendFactor::InvSrcAlpha: return MTL::BlendFactorOneMinusSourceAlpha;
+ case BlendFactor::DestAlpha: return MTL::BlendFactorDestinationAlpha;
+ case BlendFactor::InvDestAlpha: return MTL::BlendFactorOneMinusDestinationAlpha;
+ case BlendFactor::DestColor: return MTL::BlendFactorDestinationColor;
+ case BlendFactor::InvDestColor: return MTL::BlendFactorOneMinusDestinationColor;
+ case BlendFactor::SrcAlphaSaturate: return MTL::BlendFactorSourceAlphaSaturated;
+ case BlendFactor::BlendColor: return MTL::BlendFactorBlendColor;
+ case BlendFactor::InvBlendColor: return MTL::BlendFactorOneMinusBlendColor;
+ case BlendFactor::SecondarySrcColor: return MTL::BlendFactorSource1Color;
+ case BlendFactor::InvSecondarySrcColor: return MTL::BlendFactorOneMinusSource1Color;
+ case BlendFactor::SecondarySrcAlpha: return MTL::BlendFactorSource1Alpha;
+ case BlendFactor::InvSecondarySrcAlpha: return MTL::BlendFactorOneMinusSource1Alpha;
+ default: return MTL::BlendFactor(0);
}
}
@@ -395,18 +332,12 @@ MTL::BlendOperation MetalUtil::translateBlendOperation(BlendOp op)
{
switch (op)
{
- case BlendOp::Add:
- return MTL::BlendOperationAdd;
- case BlendOp::Subtract:
- return MTL::BlendOperationSubtract;
- case BlendOp::ReverseSubtract:
- return MTL::BlendOperationReverseSubtract;
- case BlendOp::Min:
- return MTL::BlendOperationMin;
- case BlendOp::Max:
- return MTL::BlendOperationMax;
- default:
- return MTL::BlendOperation(0);
+ case BlendOp::Add: return MTL::BlendOperationAdd;
+ case BlendOp::Subtract: return MTL::BlendOperationSubtract;
+ case BlendOp::ReverseSubtract: return MTL::BlendOperationReverseSubtract;
+ case BlendOp::Min: return MTL::BlendOperationMin;
+ case BlendOp::Max: return MTL::BlendOperationMax;
+ default: return MTL::BlendOperation(0);
}
}
@@ -428,12 +359,9 @@ MTL::Winding MetalUtil::translateWinding(FrontFaceMode mode)
{
switch (mode)
{
- case FrontFaceMode::CounterClockwise:
- return MTL::WindingCounterClockwise;
- case FrontFaceMode::Clockwise:
- return MTL::WindingClockwise;
- default:
- return MTL::Winding(0);
+ case FrontFaceMode::CounterClockwise: return MTL::WindingCounterClockwise;
+ case FrontFaceMode::Clockwise: return MTL::WindingClockwise;
+ default: return MTL::Winding(0);
}
}
@@ -441,14 +369,10 @@ MTL::CullMode MetalUtil::translateCullMode(CullMode mode)
{
switch (mode)
{
- case CullMode::None:
- return MTL::CullModeNone;
- case CullMode::Front:
- return MTL::CullModeFront;
- case CullMode::Back:
- return MTL::CullModeBack;
- default:
- return MTL::CullMode(0);
+ case CullMode::None: return MTL::CullModeNone;
+ case CullMode::Front: return MTL::CullModeFront;
+ case CullMode::Back: return MTL::CullModeBack;
+ default: return MTL::CullMode(0);
}
}
@@ -456,12 +380,9 @@ MTL::TriangleFillMode MetalUtil::translateTriangleFillMode(FillMode mode)
{
switch (mode)
{
- case FillMode::Solid:
- return MTL::TriangleFillModeFill;
- case FillMode::Wireframe:
- return MTL::TriangleFillModeLines;
- default:
- return MTL::TriangleFillMode(0);
+ case FillMode::Solid: return MTL::TriangleFillModeFill;
+ case FillMode::Wireframe: return MTL::TriangleFillModeLines;
+ default: return MTL::TriangleFillMode(0);
}
}
diff --git a/tools/gfx/metal/metal-util.h b/tools/gfx/metal/metal-util.h
index 279f0c67e..bcf988c3b 100644
--- a/tools/gfx/metal/metal-util.h
+++ b/tools/gfx/metal/metal-util.h
@@ -5,20 +5,28 @@
#include "metal-api.h"
#include "slang-gfx.h"
-namespace gfx {
+namespace gfx
+{
// Utility functions for Metal
-struct MetalUtil
+struct MetalUtil
{
- static NS::SharedPtr<NS::String> createString(const char* str, NS::StringEncoding encoding = NS::UTF8StringEncoding)
+ static NS::SharedPtr<NS::String> createString(
+ const char* str,
+ NS::StringEncoding encoding = NS::UTF8StringEncoding)
{
- NS::SharedPtr<NS::String> nsString = NS::TransferPtr(NS::String::alloc()->init(str, encoding));
+ NS::SharedPtr<NS::String> nsString =
+ NS::TransferPtr(NS::String::alloc()->init(str, encoding));
return nsString;
}
- static NS::SharedPtr<NS::String> createStringView(void* bytes, size_t len, NS::StringEncoding encoding = NS::UTF8StringEncoding)
+ static NS::SharedPtr<NS::String> createStringView(
+ void* bytes,
+ size_t len,
+ NS::StringEncoding encoding = NS::UTF8StringEncoding)
{
- NS::SharedPtr<NS::String> nsString = NS::TransferPtr(NS::String::alloc()->init(bytes, len, encoding, false));
+ NS::SharedPtr<NS::String> nsString =
+ NS::TransferPtr(NS::String::alloc()->init(bytes, len, encoding, false));
return nsString;
}
@@ -31,7 +39,7 @@ struct MetalUtil
static MTL::SamplerMinMagFilter translateSamplerMinMagFilter(TextureFilteringMode mode);
static MTL::SamplerMipFilter translateSamplerMipFilter(TextureFilteringMode mode);
static MTL::SamplerAddressMode translateSamplerAddressMode(TextureAddressingMode mode);
- static MTL::CompareFunction translateCompareFunction(ComparisonFunc func);
+ static MTL::CompareFunction translateCompareFunction(ComparisonFunc func);
static MTL::StencilOperation translateStencilOperation(StencilOp op);
static MTL::VertexStepFunction translateVertexStepFunction(InputSlotClass slotClass);
@@ -46,7 +54,6 @@ struct MetalUtil
static MTL::Winding translateWinding(FrontFaceMode mode);
static MTL::CullMode translateCullMode(CullMode mode);
static MTL::TriangleFillMode translateTriangleFillMode(FillMode mode);
-
};
struct ScopedAutoreleasePool
diff --git a/tools/gfx/metal/metal-vertex-layout.cpp b/tools/gfx/metal/metal-vertex-layout.cpp
index 686f3ad0c..722d5396d 100644
--- a/tools/gfx/metal/metal-vertex-layout.cpp
+++ b/tools/gfx/metal/metal-vertex-layout.cpp
@@ -1,5 +1,6 @@
// metal-vertex-layout.cpp
#include "metal-vertex-layout.h"
+
#include "metal-util.h"
namespace gfx
@@ -14,7 +15,8 @@ Result InputLayoutImpl::init(const IInputLayout::Desc& desc)
{
for (Index i = 0; i < desc.inputElementCount; i++)
{
- if (MetalUtil::translateVertexFormat(desc.inputElements[i].format) == MTL::VertexFormatInvalid)
+ if (MetalUtil::translateVertexFormat(desc.inputElements[i].format) ==
+ MTL::VertexFormatInvalid)
{
return SLANG_E_INVALID_ARG;
}
@@ -27,9 +29,11 @@ Result InputLayoutImpl::init(const IInputLayout::Desc& desc)
return SLANG_OK;
}
-NS::SharedPtr<MTL::VertexDescriptor> InputLayoutImpl::createVertexDescriptor(NS::UInteger vertexBufferIndexOffset)
+NS::SharedPtr<MTL::VertexDescriptor> InputLayoutImpl::createVertexDescriptor(
+ NS::UInteger vertexBufferIndexOffset)
{
- NS::SharedPtr<MTL::VertexDescriptor> vertexDescriptor = NS::TransferPtr(MTL::VertexDescriptor::alloc()->init());
+ NS::SharedPtr<MTL::VertexDescriptor> vertexDescriptor =
+ NS::TransferPtr(MTL::VertexDescriptor::alloc()->init());
for (Index i = 0; i < m_inputElements.getCount(); i++)
{
@@ -44,9 +48,13 @@ NS::SharedPtr<MTL::VertexDescriptor> InputLayoutImpl::createVertexDescriptor(NS:
for (Index i = 0; i < m_vertexStreams.getCount(); i++)
{
const auto& vertexStream = m_vertexStreams[i];
- MTL::VertexBufferLayoutDescriptor* desc = vertexDescriptor->layouts()->object(i + vertexBufferIndexOffset);
+ MTL::VertexBufferLayoutDescriptor* desc =
+ vertexDescriptor->layouts()->object(i + vertexBufferIndexOffset);
desc->setStepFunction(MetalUtil::translateVertexStepFunction(vertexStream.slotClass));
- desc->setStepRate(vertexStream.slotClass == InputSlotClass::PerVertex ? 1 : vertexStream.instanceDataStepRate);
+ desc->setStepRate(
+ vertexStream.slotClass == InputSlotClass::PerVertex
+ ? 1
+ : vertexStream.instanceDataStepRate);
desc->setStride(vertexStream.stride);
}
diff --git a/tools/gfx/metal/metal-vertex-layout.h b/tools/gfx/metal/metal-vertex-layout.h
index 5cfdf3dc6..26af7f496 100644
--- a/tools/gfx/metal/metal-vertex-layout.h
+++ b/tools/gfx/metal/metal-vertex-layout.h
@@ -18,7 +18,8 @@ public:
List<VertexStreamDesc> m_vertexStreams;
Result init(const IInputLayout::Desc& desc);
- NS::SharedPtr<MTL::VertexDescriptor> createVertexDescriptor(NS::UInteger vertexBufferIndexOffset);
+ NS::SharedPtr<MTL::VertexDescriptor> createVertexDescriptor(
+ NS::UInteger vertexBufferIndexOffset);
};
} // namespace metal