使用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
- PROFILE_LABEL_PUSH("ZPASS");
- 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( bRenderNormalsOnly )
- 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里继续使用了。
- if(NewRenderTargets== NULL ||!RTs[i]->GetRenderTargetView())
- D3D9Device->SetRenderTarget(,ZTarget);
- D3D9Device->SetRenderTarget(,SceneNormal);
- D3D9Device->SetRenderTarget(,SceneNormal);//错误
- D3D9Device->SetRenderTarget(,ZTarget);
- D3D9Device->SetRenderTarget(,SceneNormal);
- D3D9Device->SetRenderTarget(,);
- D3D9Device->SetRenderTarget(,SceneNormal);//正确
而我们修改过的代码,因为某些逻辑问题,设置RT1为NULL的操作被跳过了
- D3D9Device->SetRenderTarget(,ZTarget);






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输出- LPDIRECT3DDEVICE9 dv = gcpRendD3D->GetD3DDevice();




使用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 值,要与修改前的值单位一致,修改前如果是像素值,修改后也要是像素值,否 ...
随机推荐
- DDL, DML不是所有SQL都是可以自动回滚的
因为DDL没有事务性,所以DDL不能回滚. 要实现自动回滚.(begin,commit,rollback),则SQL语句中只能包括DML. 这样,自动化发布就会受限规范格式. 故而,一刀切的办法是,假 ...
- mac平台scala开发环境搭建
到scala官网,下载scala的sdk,地址:http://www.scala-lang.org/download/ adeMacBook-Pro:scala- apple$ wget http:/ ...
- PHP多文件上传类
<?php class Upload{ var $saveName;// 保存名 var $savePath;// 保存路径 var $fileFormat = array('gif','jpg ...
- web页面自适应手机屏幕宽度
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scal ...
- WebRTC源码分析四:视频模块结构
转自:http://blog.csdn.net/neustar1/article/details/19492113 本文在上篇的基础上介绍WebRTC视频部分的模块结构,以进一步了解其实现框架,只有了 ...
- struts2的标签中得到JSP脚本的变量值
转自:http://www.cnblogs.com/modou/articles/1299024.html 大家先来看一段代码: <% int i=1; %> <s:property ...
- C++的那些事:函数全解析
一.函数的结构 函数在C++中可能出现在三种地方,一是函数的定义,它包括了如上图的结构:二是函数的声明,它与函数的定义相比,没有了函数体部分:三则是函数的调用.当然,不同的函数定义可以还会稍有不同,比 ...
- SQL 中数值型数据截取以及四舍五入
SQL 中数值型数据截取及四舍五入 例一: -- 将两个数值分别截取只保留两位小数 ( 注意此时字段默认为 decimal ) select CAST ( 10.097 as decimal ( 10 ...
- hadoop本地库无法加载
(1)设置环境变量 export HADOOP_HOME=/your/own/hadoop/home export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME ...
- python 添加类属性
类属性必须赋值. 创建类属性 类是模板,而实例则是根据类创建的对象. 绑定在一个实例上的属性不会影响其他实例,但是,类本身也是一个对象,如果在类上绑定一个属性,则所有实例都可以访问类的属性,并且,所有 ...