使用Nsight查找CE3的渲染bug





pixout FogPassPS(vert2fragFog IN)
{
pixout OUT;
float sceneDepth;
half4 localFogColor;
float3 worldPos,cameraToWorldPos;
FogPassCommon(IN,sceneDepth,localFogColor,worldPos,cameraToWorldPos);
localFogColor.a=1.0-localFogColor.a;
localFogColor.xyz*=HDRParams2.y;
HDROutput(OUT,localFogColor,);
return OUT;
}
从shader的名字看,确实是FogPass的问题,先把代码回滚回正确的版本后,对两个版本fogpass的shader代码做比对,没有任何区别,排除了shader source code 出错的可能性。











PROFILE_LABEL_PUSH("ZPASS");
FX_ProcessZPassRenderLists();
PROFILE_LABEL_POP("ZPASS");CD3D9Renderer::FX_ProcessZPassRenderLists,而它通过调用CD3D9Renderer::FX_ZScene,来设置rendertarget
if( bRenderNormalsOnly )
{
FX_PushRenderTarget(,CTexture::s_ptexSceneNormalsMap,&m_DepthBufferOrigMSAA,false,-,true);
}
else
{
FX_PushRenderTarget(,CTexture::s_ptexZTarget,&m_DepthBufferOrigMSAA,false,-,true);
FX_PushRenderTarget(,CTexture::s_ptexSceneNormalsMap, NULL);
}这里FX_PushRenderTarget并不会立即调用d3d的api设置rendertarget,而是把信息保存在RT的stack里,等commit时再统一进行设置,条件语句if成功的分支,就是把ZTarget设置到RT0的阶段,但从
if(NewRenderTargets== NULL ||!RTs[i]->GetRenderTargetView())
{
mNativeD3D9Device->SetRenderTarget(i, NULL);
}
else
{
IDirect3DSurface9* pSurf =(IDirect3DSurface9*)RTs[i]->GetRenderTargetView()->GetNativeResource();
mNativeD3D9Device->SetRenderTarget( i, pSurf );
}上面是同事修改过后的SetRednerTarget函数,在这里设置断点,结果发现传递进去的pSurf指针也是正确的,那么说明,这部分API的调用是没问题的,很有可能是SetRenderTarget失败,导致前一个pass里,设置的RT0 surface,也就是R32F ZTarget被保留到了下一个pass里继续使用了。
D3D9Device->SetRenderTarget(,ZTarget);
D3D9Device->SetRenderTarget(,SceneNormal); D3D9Device->SetRenderTarget(,SceneNormal);//错误D3D9Device->SetRenderTarget(,ZTarget);
D3D9Device->SetRenderTarget(,SceneNormal); D3D9Device->SetRenderTarget(,);
D3D9Device->SetRenderTarget(,SceneNormal);//正确而我们修改过的代码,因为某些逻辑问题,设置RT1为NULL的操作被跳过了






CE老版本的设置方法,而DX11风格变成了统一设置,而我们把这个参数忘记了。
LPDIRECT3DDEVICE9 dv = gcpRendD3D->GetD3DDevice();
bool sRGBRead = gRenDev->IsLinearSpaceShadingEnabled()&&( m_bIsSRGB || s_TexStates[nTS].m_bSRGBLookup &&(m_nFlags& FT_USAGE_ALLOWREADSRGB));
STexState*pDTS =&TexStages[nTUnit].m_State;
if(pDTS->m_bSRGBLookup != sRGBRead )
{
pDTS->m_bSRGBLookup = sRGBRead;
dv->SetSamplerState(nTUnit + nVtxTexOffSet, D3DSAMP_SRGBTEXTURE, sRGBRead ? TRUE : FALSE);
}然后,又回到了SceneDiffuseAcc渲染错误的问题上了。这个问题略坑,还没找到正确解决方法,
具体现象是,在正确版本里,把法线,UV,以及其他定值作为output输出




使用Nsight查找CE3的渲染bug的更多相关文章
- 【H5疑难杂症】脱离文档流时的渲染BUG
BUG重现 最近机票团队在一个页面布局复杂的地方发现一个BUG,非常奇怪并且不好定位,这类问题一般最后都会到我这里,这个问题是,改变dom结构,页面却不渲染!!! 如图所示,我动态的改变了dom结构, ...
- 记 移动端页面中莫名其妙的渲染BUG
问题描述: 在一个很简单的测试页面中 简单的两块布局,上下两块均没有单独设置字体大小,都用body继承的大小,即40px.我们现在给第一个块.fl 加上浮动 float:left; 另外一个块处于正 ...
- CKPlayer 只调用HTML5播放器时全屏问题 这只是Chrome浏览器的渲染bug
如题,在系统中使用CKPlayer播放器,一切顺利,偶然发现没有全屏按钮, 正常的全屏按钮是这样的: 经过一步步调试,发现问题出在iframe, 当视频页面在iframe内时,全屏按钮不显示了,这个和 ...
- 如何使用Xcode调试Shader代码Bug导致的渲染问题
我最近发现了一个与Unity中的表面着色器有关的小Bug. 你可以看到如下所示的渲染瑕疵. 有时人们会将相似的渲染瑕疵归因于同时使用HDR和Bloom效果,但实际上,表面着色器是错误的,至少在本文中所 ...
- 线上应用bug跟踪查找-友盟统计
线上的应用只要用心点点都能发现些bug,连微信,QQ也不列外.但是bug中最严重的算是闪退了,这导致了用户直接不能使用我们的app. 我们公司是特别注重用户反馈和体验的,我们会定期打电话咨询用户的使用 ...
- 摄像头bug查找工作总结
近期花了很长时间在libcamera中查找和解决一个bug.下面将这段时间中的工作过程,以及对camera的认识总结如下: 首先是问题的发生,在UM2801中,摄像头的代码已经基本实现,并且相应功能也 ...
- 有没有一个工具可以帮助查找python的bug和进行静态的代码分析?
答:PyChecker是一个python代码的静态分析工具,它可以帮助查找python代码的bug, 会对代码的复杂度和格式提出警告 Pylint是另外一个工具可以进行codingstandard检查
- 【前端优化之渲染优化】大屏android手机动画丢帧的背后
前言 上周我与阿里的宇果有一次技术的交流,然后对天猫H5站点做了一些浅层次的分析,后面点时间基本天天都会有联系,中途聊了一些技术细节.聊了双方团队在干什么,最后聊到了前端优化.因为我本身参与了几次携程 ...
- 项目中遇到的各种bug和踩过的坑
zepto 赋值时单位转换问题 zepto 的 animate 方法移动某个元素的位置时,例如修改某个绝对定位的元素的 left 值,要与修改前的值单位一致,修改前如果是像素值,修改后也要是像素值,否 ...
随机推荐
- php 增删改查练习
添加界面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...
- php 指针遍历、预定义数组和常用函数
<?php /*//定义 $attr = array(1,2,3); $attr[] = 1; $attr = array("one"=>"hello&quo ...
- -- Warning: Skipping the data of table mysql.event. Specify the --events option explicitly.
[root@DB ~]# mysqldump -uroot -p123 --flush-logs --all-databases >fullbackup_sunday_11_PM.sql -- ...
- 理解LoadRunner中的局部变量和全局变量
在C语言中,变量有效性的范围称变量的作用域.不仅对于形参变量,C语言中所有的量都有自己的作用域,按作用域范围不同,可分为局部变量和全局变量两种变量类型. 在LoadRunner中应用全局变量和局部变量 ...
- iOS开发网络篇—GET请求和POST请求(转)
一.GET请求和POST请求简单说明 创建GET请求 1 // 1.设置请求路径 2 NSString *urlStr=[NSString stringWithFormat:@"http:/ ...
- Android APK反编译详解(附图)(转)
这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而得到源代码吧,google了一下,确实很简单,以下是我的实践过程. 在此郑重声明,贴出来的目的不是为了去破解人家的软件, ...
- HDU 5009 Paint Pearls 双向链表优化DP
Paint Pearls Problem Description Lee has a string of n pearls. In the beginning, all the pearls ha ...
- 2016.6.21 PHP与MqSQL交互之图片读取
<td width="265"> <?php mysql_select_db("member"); mysql_query("set ...
- PrintDocument 实践
简单使用,直接上代码 1.设置打印页大小 和页边距 this.printDocument1.DefaultPageSettings = new System.Drawing.Printing.Page ...
- HDU2204 Eddy's爱好(容斥原理)
题目问[1,n]有几个数是$m^k (k>1)$形式. 如果这样考虑,m已知k未知,对于每一个m统计其k的数量即$\lfloor log_mn \rfloor$个,再容斥,然而m太多了,完全不可 ...