yum-mirror/slang

Making it easier to work with shaders

git clone https://git.yummers.dev/yum-mirror/slang

Ellie Hermaszewskaformatf65d756bf

master
2.4 KiB68 linesraw
1// metal-util.h
2#pragma once
3
4#include "core/slang-basic.h"
5#include "metal-api.h"
6#include "slang-gfx.h"
7
8namespace gfx
9{
10
11// Utility functions for Metal
12struct MetalUtil
13{
14    static NS::SharedPtr<NS::String> createString(
15        const char* str,
16        NS::StringEncoding encoding = NS::UTF8StringEncoding)
17    {
18        NS::SharedPtr<NS::String> nsString =
19            NS::TransferPtr(NS::String::alloc()->init(str, encoding));
20        return nsString;
21    }
22
23    static NS::SharedPtr<NS::String> createStringView(
24        void* bytes,
25        size_t len,
26        NS::StringEncoding encoding = NS::UTF8StringEncoding)
27    {
28        NS::SharedPtr<NS::String> nsString =
29            NS::TransferPtr(NS::String::alloc()->init(bytes, len, encoding, false));
30        return nsString;
31    }
32
33    static MTL::PixelFormat translatePixelFormat(Format format);
34    static MTL::VertexFormat translateVertexFormat(Format format);
35
36    static bool isDepthFormat(MTL::PixelFormat format);
37    static bool isStencilFormat(MTL::PixelFormat format);
38
39    static MTL::SamplerMinMagFilter translateSamplerMinMagFilter(TextureFilteringMode mode);
40    static MTL::SamplerMipFilter translateSamplerMipFilter(TextureFilteringMode mode);
41    static MTL::SamplerAddressMode translateSamplerAddressMode(TextureAddressingMode mode);
42    static MTL::CompareFunction translateCompareFunction(ComparisonFunc func);
43    static MTL::StencilOperation translateStencilOperation(StencilOp op);
44
45    static MTL::VertexStepFunction translateVertexStepFunction(InputSlotClass slotClass);
46
47    static MTL::PrimitiveType translatePrimitiveType(PrimitiveTopology topology);
48    static MTL::PrimitiveTopologyClass translatePrimitiveTopologyClass(PrimitiveType type);
49
50    static MTL::BlendFactor translateBlendFactor(BlendFactor factor);
51    static MTL::BlendOperation translateBlendOperation(BlendOp op);
52    static MTL::ColorWriteMask translateColorWriteMask(RenderTargetWriteMask::Type mask);
53
54    static MTL::Winding translateWinding(FrontFaceMode mode);
55    static MTL::CullMode translateCullMode(CullMode mode);
56    static MTL::TriangleFillMode translateTriangleFillMode(FillMode mode);
57};
58
59struct ScopedAutoreleasePool
60{
61    ScopedAutoreleasePool() { m_pool = NS::AutoreleasePool::alloc()->init(); }
62    ~ScopedAutoreleasePool() { m_pool->drain(); }
63    NS::AutoreleasePool* m_pool;
64};
65
66#define AUTORELEASEPOOL ScopedAutoreleasePool _pool_;
67
68} // namespace gfx