我最近买了已故的2016年的MacBook Pro用的Radeon GPU 445,现在我在与运行在iOS和埃尔卡皮坦细内核函数麻烦Nvidia GPU。看来,3D纹理未在Z轴插补,即使我指定我的采样器是这样的:插值3D纹理的不工作的Radeon GPU
constexpr sampler s = sampler(coord::normalized,
address::repeat,
filter::linear);
问题是这样的形象非常明显:
我试图迫使英特尔虹膜图形(集成),通过使用:
NSArray *devices = MTLCopyAllDevices();
device = devices[1];
代替
device = MTLCreateSystemDefaultDevice();
但是,这并没有给我一个背景可言,即使
device = devices[0];
的作品就好了。
我已经尝试从halfs切换到浮点内核,但没有任何不同的结果。
UPDATE:由于肯以下建议,建立对cpu的采样器状态,并把它当作一个统一的,似乎这样的伎俩:
MTLSamplerDescriptor *samplerDescriptor = [MTLSamplerDescriptor new];
samplerDescriptor.minFilter = MTLSamplerMinMagFilterLinear;
samplerDescriptor.magFilter = MTLSamplerMinMagFilterLinear;
samplerDescriptor.sAddressMode = MTLSamplerAddressModeRepeat;
samplerDescriptor.tAddressMode = MTLSamplerAddressModeRepeat;
samplerDescriptor.rAddressMode = MTLSamplerAddressModeRepeat;
id<MTLSamplerState> sampler = [device newSamplerStateWithDescriptor:samplerDescriptor];
[commandEncoder setSamplerState:sampler atIndex:0];
在着色器:
sampler s [[sampler(0)]]
我m仍然非常有兴趣了解为什么以及何时constexpr采样器会在Radeon硬件上出现三维失效。
要尝试的东西如果您还没有:独立指定'min_filter','mag_filter'和(可能)'mip_filter',而不是'filter'。试试'bicubic'而不是'linear'来看看它是否重要。尝试创建一个'MTLSamplerState'对象,并通过API传递它,而不是在着色器代码中定义的采样器。 –
像你所建议的那样在CPU上创建MTLSamplerState可以解决问题。谢谢!任何想法为什么,或者这是一个已知的错误? –
bicubic没有定义我认为,至少我不能访问它。 –