VertexFunction和FragmentFunction在.metal文件中定义得很好,但是当我在苹果公司的文档:苹果公司的文档:-fcikernel标志之后指定编译器和链接器选项,而在MTLLINKER_FLAGS中在用户定义的设置中指定-cikernel平面时,它们就变成了零。
我需要上面的设置与MSL (金属阴影语言)的cikernel。实际上,带有核心图像内核语言的Core在12.0中被否决了。
如何同时使用顶点/片段金属着色器和MSL cikernel?
let library = self.device?.makeDefaultLibrary()!
let pipeLineDescriptor = MTLRenderPipelineDescriptor()
pipeLineDescriptor.vertexFunction=library.makeFunction(name: "myVertexShader")
pipeLineDescriptor.fragmentFunction=library.makeFunction(name: "myFragmentShader")发布于 2020-02-15 09:05:03
在Xcode 11中对Frank的答案进行了更新,正如Giraff所提到的,金属编译器只是忽略了不以.metal结尾的输入文件。为了确保CI内核文件不受常规金属管道的影响,我将扩展名为".mcikernel“,并将其放入构建规则脚本:
mkdir -p ${DERIVED_FILES_DIR}/kernels
cp ${INPUT_FILE_PATH} ${DERIVED_FILES_DIR}/${INPUT_FILE_BASE}.metal
xcrun metal -fcikernel ${DERIVED_FILES_DIR}/${INPUT_FILE_BASE}.metal -c -o ${DERIVED_FILES_DIR}/kernels/${INPUT_FILE_BASE}.air
xcrun metallib -cikernel -o ${DERIVED_FILES_DIR}/kernels/${INPUT_FILE_BASE}.metallib ${DERIVED_FILES_DIR}/kernels/${INPUT_FILE_BASE}.air发布于 2021-05-16 06:46:47
我无法让现有的任何一个答案正常工作(AlterEgo答案似乎不完整,比如没有显示输入/输出文件设置)。
无论如何,苹果的WWDC视频推荐如下。
使用以下方法创建一个名为MyKernels.ci.metal的金属文件:
#include <metal_stdlib>
using namespace metal;
#include <CoreImage/CoreImage.h>
extern "C" float4 do_nothing(coreimage::sample_t s) {
return s;
}接下来,添加两个构建规则,它们都取消选中“每个体系结构运行一次”。规则1:
Source Files with names matching:
*.ci.metal
xcrun metal -c -I $MTL_HEADER_SEARCH_PATHS -fcikernel "${INPUT_FILE_PATH}" -o "${SCRIPT_OUTPUT_FILE_0}"
output files:
$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).air第二:
Source Files with names matching:
*.ci.air
xcrun metallib -cikernel "${INPUT_FILE_PATH}" -o "${SCRIPT_OUTPUT_FILE_0}"
output files:
$(METAL_LIBRARY_OUTPUT_DIR)/$(INPUT_FILE_BASE).metallib使用:
let url = Bundle.main.url(forResource: "MyKernels", withExtension: "ci.metallib")!
let data = try! Data(contentsOf: url)
kernel = try! CIColorKernel(functionName: "do_nothing", fromMetalLibraryData: data)注意,建议将fckernel和cikernel标志添加到Build Settings中的其他答案是不推荐的。如果使用常规金属,它们会引起问题,可能还有其他问题。此解决方案将仅在具有.ci.metal扩展名的文件上使用这些标志。
构建规则的截图:

https://stackoverflow.com/questions/57391441
复制相似问题