From 16c7fb5159e2393b9f3c5f828d051d1c94fa3ebf Mon Sep 17 00:00:00 2001 From: Dynamitos Date: Sun, 21 Apr 2024 10:37:15 +0200 Subject: [PATCH] slang doesnt support mesh shading yet, exploring later --- res/shaders/Amp.dxil | Bin 11932 -> 0 bytes res/shaders/test.glsl | 19 ---- res/shaders/test.json | 77 --------------- res/shaders/test.metallib | Bin 13832 -> 0 bytes src/Engine/Graphics/Metal/Descriptor.h | 2 +- src/Engine/Graphics/Metal/Shader.mm | 124 ++----------------------- src/Engine/Graphics/slang-compile.cpp | 12 ++- 7 files changed, 20 insertions(+), 214 deletions(-) delete mode 100755 res/shaders/Amp.dxil delete mode 100755 res/shaders/test.glsl delete mode 100644 res/shaders/test.json delete mode 100644 res/shaders/test.metallib diff --git a/res/shaders/Amp.dxil b/res/shaders/Amp.dxil deleted file mode 100755 index 229a32ce8f0000db3ba87e44b1e88870d4b7d303..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11932 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 diff --git a/res/shaders/test.glsl b/res/shaders/test.glsl deleted file mode 100755 index f9fb965..0000000 --- a/res/shaders/test.glsl +++ /dev/null @@ -1,19 +0,0 @@ -#version 450 -#extension GL_EXT_mesh_shader : require -layout(row_major) uniform; -layout(row_major) buffer; - -#line 27 0 -layout(local_size_x = 3, local_size_y = 1, local_size_z = 1) in; -layout(max_vertices = 12) out; -layout(max_primitives = 4) out; -layout(triangles) out; -void main() -{ - - SetMeshOutputsEXT(12U, 4U); - -#line 46 - return; -} - diff --git a/res/shaders/test.json b/res/shaders/test.json deleted file mode 100644 index a99e4b7..0000000 --- a/res/shaders/test.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "EntryPoint": "taskMain", - "FunctionConstants": [], - "NeedsFunctionConstants": false, - "Resources": [ - { - "abIndex": 0, - "slot": 0, - "type": "SRV" - }, - { - "abIndex": 1, - "slot": 1, - "type": "SRV" - }, - { - "abIndex": 2, - "slot": 2, - "type": "SRV" - }, - { - "abIndex": 3, - "slot": 3, - "type": "SRV" - }, - { - "abIndex": 4, - "slot": 0, - "type": "CBV" - } - ], - "ShaderID": "2266638404583382645", - "ShaderType": "Amplification", - "TopLevelArgumentBuffer": [ - { - "EltOffset": 0, - "Size": 24, - "Slot": 0, - "Space": 2, - "Type": "SRV" - }, - { - "EltOffset": 24, - "Size": 24, - "Slot": 1, - "Space": 2, - "Type": "SRV" - }, - { - "EltOffset": 48, - "Size": 24, - "Slot": 2, - "Space": 2, - "Type": "SRV" - }, - { - "EltOffset": 72, - "Size": 24, - "Slot": 3, - "Space": 2, - "Type": "SRV" - }, - { - "EltOffset": 96, - "Size": 24, - "Slot": 0, - "Space": 1, - "Type": "CBV" - } - ], - "max_payload_size_in_bytes": 4096, - "num_threads": [ - 128, - 1, - 1 - ] -} \ No newline at end of file diff --git a/res/shaders/test.metallib b/res/shaders/test.metallib deleted file mode 100644 index 71da910be9380e0440153c43d928241ac8840440..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13832 zcmZu&3qaG=_rH6v4H#qK)bajKQ1ON1A%cKzfPkb0ibkTb$wNRkCJaQR+!z8G80I7L zkt4P2jfG~0{Wl;b!$Q-fPy->gq+hEjv9$i@e)s*tL?-v1^Znd&&OPVc`@Q$#F3VDu zMl*Cw#6?IiKnU?dp@L7Um7rRRiWydhM?Di`p8ct3;asZ#e#E*@%9ky+M_OgkhGoiJ zHA;CVX)y!w667lq2;@P?92M^~a=X`De912HC%=cTM-lJ)`cxVRKC z)!*Y})#BwVc!-HOh=mwvS?r3{JVf`tJZ@{F2 z5-UWjW;*S@(XeRpw&6G2Iluh23(Mm;ZRriuWJjzcf-)R{(0}lWjxpVs2LKDOb$qFx zPH5MG+a-L2ezZr(ktqTH5Sj#qtM}b0?_e+C2!q03W>oU0+VR}H*)Oisi5D}YUv`Xc z7Y2#Kc;Y7yk7amp#!(mYqqC8pRtjtxUV;zTXB5$ zmpA!SBAMBjM9HlK@s&f)m3|MnjL1d8;rn8Sv_@#(uw+H7{jRxzUoR5AZ1G`R9>{v{ zX0S~}tDir?(Cx;(+@B`#nxUH`kUr45zMUsD2X*awqsDdGf9rWa4cGD9{+(XvJ!PLT z`fsbt9{gw#@=Ja?Zl7DtyTn&~HmZ-Wa^u+@(TJ78PNLR#XSR^7UmC-!AcT2rIZ;d~ zgndGe%Os_c!Q;5xkR>toH^VCw4ho^(1u~@&%7qEySOi0gl3_Bs0`;iv#lz24IH6pF z?*q)EW`@Q==YzJQ1es4hQH6R9PHYMKl5=<%H#6!{9!qJJOz^0QL0^Fxv;^$oIXa<2 z(Ms^!D~%0=7~VrPp-Gd#-Q2`lkYmv3xTT8f!W=^huXrZ1^h1?P&ccX$^222;{uSZ+|M_Tv@ zTNu&_B`%pA2`(-&-%909`+Cs?**-5<1roUP@$5%Pra%#X23OBW{KCSd*O^dBg8S64 zQvAl@AoYyF`fIu|0QKduw0N9(i+%YXAY}s2j{ZW8AoqI3^oiN5{DFaQPTFUVU{;HohC<#*%_DZVW9L z3%*+U~EAMpBy5J!4s_4IQr zCILJi2ZW?L$;yQ*y@gmuMEP=So=AA& zAjDTBOkM5hju?0@;Za3MY^s0zM3WRTW$YWSg89+jt!A&U8a=b6cBGiW zqmvcY5ffF*is~$_)oQp~c-+ki)fx@AOv5TEt=16LZk;ZI!FoZT)LAWc?zadmNrGTu zyVnhgXSc+wRq35AeIcU75YZJA-pq<@F+^6fB04Ri5(Rfl4tIVIEDzlIx@t{*wMM}$ z@#mHd+kx3ly6SXTGsM+}4b__)^t1nG5&W-L@TW;IC}pkdX!IOt^z0<-Yf8`a63=$M z*Lfx9+xnRBj+pQUvOd)owmT-Qh83~9Z7y{Bpd#WjE2625e=fILlUiM-8My^ZJ?Loh?od zYl>NLz!1@yU(og>Dj9H>h7C7DDk=_@oJZN z!3f@w_+%3YBU)mjPO-vw8^SwNTVV7d*fQ`lp?Z_1+N~pAFx<--N)r5noP(!G32wQD zRVb`3(y;JsQB-R>sy7|umNl3w8R5MKj~YWH49&YF)2V4kUNC~aFkAFqH!gVMppW|;_U3K!Xg^YC{Pz^m1^x+T$@vv zrOaGkSWv8atSPHhTU?kmVgd`MZz{~yW~FP#G!-dTnta^b`qBVpetyBGbX9JVN~z7r z$;wR6C{Sq%)LGDXMnSP!Ta;Uv5l{lcxdrNUl`^lO@DU(a{V1TpRx(R7{56HSB}#49 z3?eXKetXPU$9P@pRQaN z5Hb!(iGxiT_o9sSoGhgV%g!5%kex&1#p>dstV~L+NTqpHEp#k`)ilb@`31^MRk~D_ z9!T3E9j2$He$Gngaa|GYsS)k zDrs96C()x*+H8*I2D3Z)F<#vauTELWrY??F%90x7+^<-RFY)6%mO4*d85~xuSXK!_t*{6HnYQfy$&BB#}B2B!MuDSH&|HO`(5{rPZ*z;Qc98bD%A(nGtcs5VgCFxdAqN&ue|2*9gx6C9d!2 zy<3%@U5%a{)=foeW;hQK&V5PFaL&N<>>?bs;H-?eosmZj5eHzSWrGq ziUNTN?8MplROShVEsA5f*K(2q&j}rJbeto*WiGqrdXZ5kaS$DmDIG+|WQ`7@cV&GJ zq9&QdQPeC`I*Lxo8XZL~vOY)A9a*D56fGAenng*Hi7EPttIa#5aj1f*`L9*XfM2S3 zoD4R>s~C>&=bP|R?Ke2H;gj5y_>THySGEVRsBOYT1WQ(dN}a1I(85AY;7wyiE?%>V zn7J{tW)UgTa(Onq<=P4C&jq3EPnwh_yJx$%Ikn9hY7NL2mzyV-DBFyVXPO*6I2u&F z7Cn?)lL=q~_=hEI<%JmyQDQp>!KFiTymJTXUa5GcR&q`5-5J}?&~Xk+C%ABtdu{8| zSWlEAbqIFZ2rsNZfBv9+md-pohG0LG{MGBc#yk;Qt69jids=7bAP!omKoH-v0mq_e z^F4(32}f4F;mpVFty#u|36&C~OuSZD8ATG_LXy;C@>BPgNpr8+ooRCOzr@z_{DpCo z*?l6CFej447n8idUK1PJ)+Pz|>!&Oe*65f@tz4L`$Arisi8K$$5x4FwYMJvU^W1#S z_7FM2bf~;&Cm*)MM31w_I1$eJ2hj zZX9;vjDdO&d+1zPEF_m&N(}R|GrDy(FJ+@RJ|Cu?smJNthB_rHdf_F-7--$X4;kV> zDU2tpV18;wXq6N1?}V|oe?H6~3k@E2AJg5bm)4E3&0N$vw!0~dULV`tLmtQI)|$|@ zn0jrdDJN6!*Ae!!)ca*}E!#=Hv2LwTSZKkZK3ecHJBJd~O?aIae6l`{vba#`PFbw9 z%cBHklisEUpJ}26^ZIDPX1jb!5KaD&6l8sFa$=6Y2uTBpb?8-ON#99N`FH?z9)h1Aar<12pfK?|0?OAFq*NDCf0 z_aY@|@(!d0w{+5izbE@r7B8QxBL!viYgp!Ufjl&tqBV9~cB1{r@|)AoGRsar(=@s) zJo81ipUK21uQWso%V!(VXa-HInmz2LrO2n>=*;%HK%mjJs%wubp2;Un=cW@Wgtw^(dwt)b z1sj@a!OY)j!2?U)r38)BKB5KpU#0~$g|jG&olD-Q1QpXir3GIbq6N!;rv)D@IYkOe z=i5Yg>eaw{o3&TN`En03a4f$#*<`e&ia$t6>u*%pZX@2z<(uP4^crNZiU_>A;cRzZ}D*sbxU_Dmn{W|wl&t;Lq) zW0Ots=4a9WxmBF%TuSBm$K}D4s`1MUR7RQt!gpEcWyPn1wBT=-Xu+;8zorB=bCtB< zXSK^Hiw~EFQWkZc-%*0npj=w;i+5?k8Q;)?O`ScIpe1M{Dag7m6WHtnU#;g4*yM7^ zd}*4=$S5y=WP42Y32L$#liiJJ1?_Ir_N`Nn#uPzoeQ(DMt4HP z{Xo{D(Q(l|fAX}wREK=_>nzFe?!TnBBv0yyfvOWK9@8gR62_Egy|B5=wix)C{y7J!O(d_Qa&=C(uA?!7Ue(``Ovr15 zO{BV(Ucx`9T6%0-l~aw^%#rQEJ*aV#dni%rFGihrqAeQ_JDTGqyz-&JXv^_0tvuUs zMp!N)s|wSh4AVi@wp-#t?vloEj`_}^a892EszzLyhYz_JU`vCeOpwqQc3r$rIX*}- z_&7*QAv1B7jj8OdJCx;BZu>HLRTId{Jur-vB3Sbr&abET&CuT)gTSqy?}+JL>-&!C z^AKN???`+be0^pfRi+gXQ!{JrK^46Rka%mn^Vfj$`<4UT|8Oilf0!#NXl!}h6O3@ORZ z5g!e&Qk;UkKs7R^T}O>o)CuM8)TiG*s${)>aK}jUUs?0kUP%6?ppg)tEj+p!LcHe>NT<(|DmVfaI74kdNi}I$Q zpRVj$Xm9v?iMWl^9>_N}F_b)(G+!n%qpn5vaEkM2)|19nB-Lhc%&!GO4y`gnH^;AmT_@OK3;2x>} zdzJDHQ~7zblwE1|hMS4vkf&RXr(HSMq3MH4`If1*yQgk>O7QOz7%lr&VG>arz-wKU zj0rm-nc&Z!X|t9d-&ZqwAn%yzPA<3X38P1auvw1wBfn#z_m26RWX$sXP#Y5`&Nqyj z=>B;%lRwk+bla-U zu4&h@Hax>v_pTkQ&B-lyr&-fxS*_IQjUVy1x$x(Uj@xlwUEaGxEN1g6bg5N-x zWn$eC?qYYMGX-9w0OO2~n4Q@!$NpUX*+lq%0J9W*#OD2OP|Ho4m_-LBxpfBdmq@Aq zD=7PMQmM;!M#hf5=8Es!t?Sv2GpVz>Gz3DO41`MN7>85-Ko#r0Ig#t=zwk<=&e%Pq z`joN#sd>(X|B2_)KGxk_ae>9#zU=lb53A_%o=@gEcrHA?wD`$1jkPsV^($wFX1G1* z$|tH`rd2oejK@(^--ItyZl9{7Eo%$*GOM4Oz2e~Ay?cjGl3nbz>V+5NRi*#a9^^KF zbuxcwx#ITkFPLFb)(-XDw6>hu=uG+fKvltcfi!Yj^&>6!!~S8);|ssWC19Vf&r{X0 zpx0f`-7T>KCsem6Crj3PY@|YX?&{tEDi>Ej_TpOmxO`7FNQ)laUr3AIK5O-Qf$CSf z^^C_cGTOT*|D<&{6}(PH`(FRay~8I+M_0`xvvgYh3h7Z@Pn8u|P_WAieDha0miR8L z;D8mlTeXn#>fVVg0Zx19jsLov^%DP&gYwVuDJ@UQ<6Dy}ET_QPLqjoA3) zb2@tu)k9RyN`B~hXjMAD?CPp8s=J;O3P zsy`)TKJ(39e{1XV{!i;jze}FXlZbu^}aiN@4>D6YJqifx@io7VQw-5a;;}qTX$`bHu|n z?*orKgy(b{nV1WIlthrBFHpZkcXww0A6Avqa%Ze^@~fUK89APb>1o*%x3!1n4yEN# z*w<+r$Vqp#`I8x+krV8sdJkna^x6GyTHQ>1@9HEEGKhKVMkOgbSfD{al!t#X=C@kolP2xQa93F-SF7g*8`6KWo|vakCnE%Hx*R$o9G)PKH~%Sl9o_W&!m=538@>9PL{6&E7d=j+#}cNsm-LXJ=6! z{d(dz4$jeuy8R!MN&DvXLo4uJ+9@m0vXeHrS=D1T*k7`M>hAW(C+ODu>bI!?N?!9A zq&z!#@7pM{??`nIITJ7Ra2Aq4i@L_nI{7xK`>joXgt}91ebc;$L%l7{syC_Sb6#EA zC!|YPo1M7W=|7jH zC0gvMHTCiX^+_snC=T z{Yc&3Qy0itSn_p`Mo!K`hxgMqQruTP_eqcLHD939Sf(1Z8teay&c@XfS4b1{m+jA| z99et&mJbt0Da zGaY}$fHo4=dwD?u;gm|RV_1d!WWjAC7VNvOtlb3uUV;VX9^5=}0J;zPSOa&h9 zj?mXo5Cep6vvFXYF1O@(AhdEjUnnv$2q{193Qx^tkNrWoe|z5#Ijr4CJL zd^6w^0jDXA?*JU%E2Jrj&qnA7;7)+kl$JjZxC`JkrSVq4@x?}(()b0yajZ0@?f(ck zz5_>7S{|U0eBiuboW?{{8>S=lN8vQ3aRy98Jnl55@kta; zQyQN|;WVXj8Q?fSG^OzslsrvoJcq(*O5@K_I8AB%Wy(HHY5XW9Pg5E{P2n`9@vkYI zrZhf4*{3Ou-=pMdO5=Q{HE%SfaS4Ufl*S=7Xf3P>=YhhS5RT_ATw2IXm*Ptk`6&gf za`ufH?0p?rz|YY%_<~Sb5+*s zPc)dHU!n@g&&|%#=Bly+vecOY8fk7A7R@Zs29yM62M6JYY-N!)JsU1u1<-&>iP=Zh z;m%c|cEkXwQ&_YSAdn0Wk_H6_1O)|zg1yj?IZ6$DA3sN>%qS=-4Ge*q0bk{heBkv% zop6hOdGyM-7V0)VZiKB2$(Jl&j#qY1xW5TYz0C)&_+oO+#~{3tmZ#Se-I3LDB0=nX)*jP;>3LpcIvH)l>ZRU6&f~)#Q~4cVX%CY z=Q!1R4LP3UUEBf@R15O($0wvbKCR%t5W(v`whwNgFp570eUS$|Y#bV-P_PU>E5emC znA3RHU<}(5TIV<=%YH;widwM0No-O>NS>%@EfJ}Q)i8tY({m9YR;jybBsSjNHLNE7 z7taf8E?&bvGnn|eK%QZ-Jpu}*_#GU3kq#i_hH>(~U%=SrfKX^_q3ru%VdPDY3qJYs zksaiXezQdo6&G6J1O1Z(shZ2BMD954^shoOHwUN}c|oP3BA^8{d?HXd=n z2V0Nu9KsIaam7yA`h(9ynP+cCbAxgJZ_A<2j3MVgE1=f0jhb(YqBql7Hv)|C4LIK>z>% diff --git a/src/Engine/Graphics/Metal/Descriptor.h b/src/Engine/Graphics/Metal/Descriptor.h index 1edd5e3..dc94774 100644 --- a/src/Engine/Graphics/Metal/Descriptor.h +++ b/src/Engine/Graphics/Metal/Descriptor.h @@ -71,7 +71,7 @@ public: PipelineLayout(PGraphics graphics, const std::string& name, Gfx::PPipelineLayout baseLayout); virtual ~PipelineLayout(); virtual void create() override; - Array> + private: PGraphics graphics; }; diff --git a/src/Engine/Graphics/Metal/Shader.mm b/src/Engine/Graphics/Metal/Shader.mm index 2552fce..c116dcc 100644 --- a/src/Engine/Graphics/Metal/Shader.mm +++ b/src/Engine/Graphics/Metal/Shader.mm @@ -9,7 +9,6 @@ #include "Metal/MTLLibrary.hpp" #include #include -#include #include using namespace Seele; @@ -27,127 +26,20 @@ Shader::~Shader() { void Shader::create(const ShaderCreateInfo& createInfo) { std::cout << "Compiling " << createInfo.name << std::endl; Map paramMapping; - Slang::ComPtr kernelBlob = generateShader(createInfo, SLANG_DXIL, paramMapping); + Slang::ComPtr kernelBlob = generateShader(createInfo, SLANG_METAL, paramMapping); + std::cout << (char*)kernelBlob->getBufferPointer() << std::endl; hash = CRC::Calculate(kernelBlob->getBufferPointer(), kernelBlob->getBufferSize(), CRC::CRC_32()); - IRCompiler* pCompiler = IRCompilerCreate(); - IRCompilerSetMinimumGPUFamily(pCompiler, IRGPUFamilyMetal3); - IRCompilerIgnoreRootSignature(pCompiler, true); - IRCompilerSetEntryPointName(pCompiler, "main"); - IRCompilerSetValidationFlags(pCompiler, IRCompilerValidationFlagAll); - - IRObject* pDXIL = IRObjectCreateFromDXIL((const uint8*)kernelBlob->getBufferPointer(), kernelBlob->getBufferSize(), - IRBytecodeOwnershipNone); - IRVersionedRootSignatureDescriptor descriptor; - descriptor.version = IRRootSignatureVersion_1_1; - Map layouts = createInfo.rootSignature->getLayouts(); - descriptor.desc_1_1.NumParameters = layouts.size(); - descriptor.desc_1_1.NumStaticSamplers = 0; - descriptor.desc_1_1.pStaticSamplers = nullptr; - Array parameters; - // each layout has an array for its bindings - Array> ranges; - for (const auto& [name, layout] : layouts) { - uint32 textureReg = 0; // SRV - uint32 samplerReg = 0; // Sampler - uint32 uavReg = 0; // UAV - uint32 constantReg = 0; // CBV - auto& bindingRanges = ranges.add(); - for (auto binding : layout->getBindings()) { - IRDescriptorRangeType type; - uint32 reg = 0; - switch (binding.descriptorType) { - case Gfx::SE_DESCRIPTOR_TYPE_SAMPLED_IMAGE: - type = IRDescriptorRangeTypeSRV; - reg = textureReg++; - break; - case Gfx::SE_DESCRIPTOR_TYPE_UNIFORM_BUFFER: - case Gfx::SE_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER: - type = IRDescriptorRangeTypeCBV; - reg = constantReg++; - break; - case Gfx::SE_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER: - case Gfx::SE_DESCRIPTOR_TYPE_STORAGE_IMAGE: - case Gfx::SE_DESCRIPTOR_TYPE_STORAGE_BUFFER: - if (binding.access == Gfx::SE_DESCRIPTOR_ACCESS_READ_ONLY_BIT) { - type = IRDescriptorRangeTypeSRV; - reg = textureReg++; - break; - } else { - type = IRDescriptorRangeTypeUAV; - reg = uavReg++; - break; - } - default: - throw std::logic_error("Not implemented"); - }; - bindingRanges.add() = IRDescriptorRange1{ - .BaseShaderRegister = reg, - .NumDescriptors = binding.descriptorCount, - .RangeType = type, - .RegisterSpace = createInfo.rootSignature->findParameter(name), - .Flags = IRDescriptorRangeFlagDescriptorsStaticKeepingBufferBoundsChecks, - }; + dispatch_data_t dispatchData = dispatch_data_create(kernelBlob->getBufferPointer(), kernelBlob->getBufferSize(), dispatch_get_main_queue(), NULL); + NS::Error* error; + library = graphics->getDevice()->newLibrary(dispatchData, &error); + if(error) + { + std::cout << error->localizedDescription()->cString(NS::ASCIIStringEncoding) << std::endl; } - parameters.add() = IRRootParameter1{ - .ParameterType = IRRootParameterTypeDescriptorTable, - .DescriptorTable = - IRRootDescriptorTable1{.NumDescriptorRanges = (uint32)(bindingRanges.size()), bindingRanges.data()}, - .ShaderVisibility = IRShaderVisibilityAll, - }; - } - IRError* signatureError = nullptr; - descriptor.desc_1_1.NumParameters = parameters.size(); - descriptor.desc_1_1.pParameters = parameters.data(); - IRRootSignature* rootSignature = IRRootSignatureCreateFromDescriptor(&descriptor, &signatureError); - assert(rootSignature); - // IRCompilerSetGlobalRootSignature(pCompiler, rootSignature); - // Compile DXIL to Metal IR: - IRError* pError = nullptr; - IRObject* pOutIR = IRCompilerAllocCompileAndLink(pCompiler, NULL, pDXIL, &pError); - - if (!pOutIR) { - // Inspect pError to determine cause. - IRErrorDestroy(pError); - } - IRShaderStage irStage; - switch (stage) { - case Gfx::SE_SHADER_STAGE_VERTEX_BIT: - irStage = IRShaderStageVertex; - break; - case Gfx::SE_SHADER_STAGE_FRAGMENT_BIT: - irStage = IRShaderStageFragment; - break; - case Gfx::SE_SHADER_STAGE_COMPUTE_BIT: - irStage = IRShaderStageCompute; - break; - case Gfx::SE_SHADER_STAGE_TASK_BIT_EXT: - irStage = IRShaderStageAmplification; - break; - case Gfx::SE_SHADER_STAGE_MESH_BIT_EXT: - irStage = IRShaderStageMesh; - break; - } - // Retrieve Metallib: - IRMetalLibBinary* pMetallib = IRMetalLibBinaryCreate(); - IRObjectGetMetalLibBinary(pOutIR, irStage, pMetallib); - dispatch_data_t data = IRMetalLibGetBytecodeData(pMetallib); - - IRShaderReflection* reflection = IRShaderReflectionCreate(); - IRObjectGetReflection(pOutIR, irStage, reflection); - std::cout << IRShaderReflectionAllocStringAndSerialize(reflection) << std::endl; - IRShaderReflectionDestroy(reflection); - - // Store the metallib to custom format or disk, or use to create a MTLLibrary. - NS::Error* error; - library = graphics->getDevice()->newLibrary(data, &error); function = library->newFunction(NS::String::string("main", NS::ASCIIStringEncoding)); if (!function) { assert(false); } - IRMetalLibBinaryDestroy(pMetallib); - IRObjectDestroy(pDXIL); - IRObjectDestroy(pOutIR); - IRCompilerDestroy(pCompiler); } uint32 Shader::getShaderHash() const { return hash; } diff --git a/src/Engine/Graphics/slang-compile.cpp b/src/Engine/Graphics/slang-compile.cpp index 0164610..0e06ed6 100644 --- a/src/Engine/Graphics/slang-compile.cpp +++ b/src/Engine/Graphics/slang-compile.cpp @@ -28,9 +28,18 @@ Slang::ComPtr Seele::generateShader(const ShaderCreateInfo& create } sessionDesc.preprocessorMacroCount = macros.size(); sessionDesc.preprocessorMacros = macros.data(); + slang::CompilerOptionEntry option; + option.name = slang::CompilerOptionName::IgnoreCapabilities; + option.value = slang::CompilerOptionValue(); + option.value.kind = slang::CompilerOptionValueKind::Int; + option.value.intValue0 = 1; slang::TargetDesc targetDesc; + targetDesc.compilerOptionEntries = &option; + targetDesc.compilerOptionEntryCount = 1; targetDesc.profile = globalSession->findProfile("sm_6_6"); targetDesc.format = target; + targetDesc.compilerOptionEntryCount = 1; + targetDesc.compilerOptionEntries = &option; sessionDesc.targetCount = 1; sessionDesc.targets = &targetDesc; StaticArray searchPaths = {"shaders/", "shaders/lib/", "shaders/generated/"}; @@ -80,7 +89,7 @@ Slang::ComPtr Seele::generateShader(const ShaderCreateInfo& create Slang::ComPtr specializedComponent; linkedProgram->specialize(specialization.data(), specialization.size(), specializedComponent.writeRef(), diagnostics.writeRef()); CHECK_DIAGNOSTICS(); - + Slang::ComPtr kernelBlob; specializedComponent->getEntryPointCode( 0, @@ -99,6 +108,7 @@ Slang::ComPtr Seele::generateShader(const ShaderCreateInfo& create } for(size_t i = 0; i < signature->getParameterCount(); ++i) { + auto param = signature->getParameterByIndex(i); paramMapping[param->getName()] = offset++; } return kernelBlob;