请选择 进入手机版 | 继续访问电脑版

开源计算机图形学社区(Open Source Computer Graphics Community) |OpenGPU Forum (2007-2013)| OpenGPU Project

 找回密码
 注册
搜索
查看: 997|回复: 7

一个关于shader中discard的问题 [复制链接]

Rank: 8Rank: 8

注册时间
2012-5-15
积分
132
发表于 2017-6-28 11:22:57 |显示全部楼层
比如一段pixel shdaer代码是这样:
float4 diffuse_texture_colour=tex2D(DiffuseTexture,UV);
if(dynamic_flow_return_true())
discard;

那么问题来了。。。那如果在纹理未被读取完成,就执行到了discard,结果是会直接discard还是等待纹理读取完毕才discard?

Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24

注册时间
2011-3-22
积分
11600
发表于 2017-6-28 13:27:48 |显示全部楼层
以上code会被shader compiler优化掉tex2D,tex2D不会执行。

使用道具 举报

Rank: 8Rank: 8

注册时间
2012-5-15
积分
132
发表于 2017-6-29 20:12:43 来自手机 |显示全部楼层
jerrywwl 发表于 2017-6-28 13:27
以上code会被shader compiler优化掉tex2D,tex2D不会执行。

我问的是不会被优化掉的情况。。。

使用道具 举报

Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24

注册时间
2011-3-22
积分
11600
发表于 2017-7-3 14:39:02 |显示全部楼层
devilwalk 发表于 2017-6-29 20:12
我问的是不会被优化掉的情况。。。

不存在这种情况,如果if判断依赖采样结果,那么必须要先串行所有fragment fetch纹理,然后才能往下执行

使用道具 举报

Rank: 8Rank: 8

注册时间
2012-5-15
积分
132
发表于 2017-7-5 15:49:08 |显示全部楼层
jerrywwl 发表于 2017-7-3 14:39
不存在这种情况,如果if判断依赖采样结果,那么必须要先串行所有fragment fetch纹理,然后才能往下执行 ...

你就假设if里面是判断从vs流到ps的某个数据就好了。。。

使用道具 举报

Rank: 5Rank: 5

注册时间
2009-8-14
积分
94
发表于 2017-7-11 13:33:12 |显示全部楼层
本帖最后由 cherlix 于 2017-7-11 13:34 编辑

如果你的branch确定是dynamic branch,也就是判断的值来自于运行时,texture sampling的时候GPU会stall,然后wait sampling的结果,如果有其他机会并行的话,这个stall可能会被hide掉,GCN是可以这样的,不太清楚mobile的GPU。但是discard在XboxOne 和 PS4 GCN上有个弊端,即使你early discard了,你discard后面的运算指令还是会执行的,只是所有的内存操作都被mask掉了,所以如果你的shader是compute heavy的话,discard不能在性能上节省什么。不知道NV和新的GCN怎么处理的这块。

使用道具 举报

Rank: 8Rank: 8

注册时间
2012-5-15
积分
132
发表于 2017-7-12 20:10:45 来自手机 |显示全部楼层
cherlix 发表于 2017-7-11 13:33
如果你的branch确定是dynamic branch,也就是判断的值来自于运行时,texture sampling的时候GPU会stall,然 ...

明白了,谢谢。。。顺便问下。。。能不能告诉我相关的知识获取途径。。。

使用道具 举报

Rank: 5Rank: 5

注册时间
2009-8-14
积分
94
发表于 2017-7-25 12:42:44 |显示全部楼层
devilwalk 发表于 2017-7-12 20:10
明白了,谢谢。。。顺便问下。。。能不能告诉我相关的知识获取途径。。。 ...

我本人就是看文档的。如果你做主机的话,有很多硬件文档是可以看的。这些硬件文档会很详细的告诉你硬件是怎么工作的。如果再有不理解的,可以去他们开发者论坛直接问。如果没有机会看到这些文档的话,有些细节的硬件知识就比较难获取。可能这个文档也可以有点帮助,我有时候会看,https://developer.amd.com/wordpr ... et_Architecture.pdf。其他的我不太知道还有什么好的渠道。可能这里有在NV或者AMD工作的朋友,他们可能能告诉你哪里可以找到更好的信息。

使用道具 举报

最近看过此主题的会员

您需要登录后才可以回帖 登录 | 注册

‹‹
我的工具栏

关于我们|手机版|Archiver|开源计算机图形学社区(Open Source Computer Graphics Community) | OpenGPU Project | OpenGPU Forum (2007-2013)

GMT+8, 2017-9-21 09:35 , Processed in 0.105217 second(s), 11 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部