我正在尝试做类似的事情
Shader error in 'Unlit/CustomParallax': unable to unroll loop, loop does not appear to terminate in a timely manner (1024 iterations) at line 76 (on metal)
它记录了一个错误FROM docker.elastic.co/kibana/kibana:7.3.1
# custom favicons
COPY favicons/* /usr/share/kibana/src/legacy/ui/public/assets/favicons/
COPY logo_small.svg /usr/share/kibana/node_modules/@elastic/eui/src/components/icon/assets/logo_kibana.svg
COPY logo_small.svg /usr/share/kibana/node_modules/@elastic/eui/lib/components/icon/assets/logo_kibana.svg
# custom throbber
RUN sed -i 's/Loading Kibana/Loading New Kibana/g' /usr/share/kibana/src/legacy/ui/ui_render/views/ui_app.pug
# NOT WORKING inline replacement and variable definition
COPY logo.b64.txt /tmp/logo.b64.txt
RUN export VAR=$(cat /tmp/logo.b64.txt); sed -i 's/image\/svg+xml.*");/image\/svg+xml;base64,$VAR");/g' /usr/share/kibana/src/legacy/ui/ui_render/views/ui_app.pug /usr/share/kibana/src/legacy/ui/ui_render/views/chrome.pug
因此,现在我有两种选择,一种是添加[unroll(100)]以限制循环时间,另一种是使用tex2Dlod而不是tex2D。
我很好奇为什么会这样?
此外,为什么可以在循环中使用tex2Dlod?
答案 0 :(得分:2)
tex2D必须计算局部导数以确定样本的正确LOD。由于通常计算导数的方式(作为相邻计算单元之间的差异),因此只能针对可预测的控制流进行计算。
您的循环不会为相邻片段对tex2D进行相同数量的调用,因此无法预测地计算导数。
有关更多详细信息,请查看GLSL specs。搜索“导数”和“统一控制流”