gpt4 book ai didi

metal - 片段函数似乎写得正确,但 Metal 提示

转载 作者:行者123 更新时间:2023-12-01 11:15:27 25 4
gpt4 key购买 nike

TL;DR:Metal 似乎没有检测到我的顶点着色器返回的内容

我有这两个用 MSL 编写的函数:

vertex float4 base_image_rect(constant float4 *pos [[buffer(0)]],
uint vid [[vertex_id]]) {
return pos[vid];
}

fragment float4 fragment_image_display(float4 vPos [[stage_in]],
texture2d<float, access::sample> imageToRender [[texture(0)]],
sampler imageSampler [[sampler(0)]]) {
return imageToRender.sample(imageSampler, float2(vPos.x, vPos.y));
}

当我尝试用这些创建渲染管道状态时,使用以下代码:

// Make image display render pipeline state
let imageDisplayStateDescriptor = MTLRenderPipelineDescriptor()
imageDisplayStateDescriptor.colorAttachments[0].pixelFormat = view.colorPixelFormat
imageDisplayStateDescriptor.vertexFunction = library.makeFunction(name: "base_image_rect")
imageDisplayStateDescriptor.fragmentFunction = library.makeFunction(name: "fragment_image_display")

displayImagePipelineState = try! device.makeRenderPipelineState(descriptor: imageDisplayStateDescriptor)

创建管道状态时出错:

fatal error: 'try!' expression unexpectedly raised an error: Error Domain=CompilerError Code=1 "Link failed: fragment input vPos was not found in vertex shader outputs" [...]

我检查并重新检查了代码,无法理解哪里出了问题。

有什么想法吗?谢谢!

最佳答案

尝试将 stage_in 替换为 position。我认为 stage_in 主要与 struct 一起使用,其中每个字段都用特定的属性限定符注释或按名称匹配。显然,当它与非结构类型一起使用时,它会尝试按名称进行匹配。例如,如果您的顶点函数要输出其中一个字段为 vPos 的结构,那么它会找到它。

关于metal - 片段函数似乎写得正确,但 Metal 提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41558534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com