使用Nsight查找CE3的渲染bug
使用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,1);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(0,CTexture::s_ptexSceneNormalsMap,&m_DepthBufferOrigMSAA,false,-1,true); } else {FX_PushRenderTarget(0,CTexture::s_ptexZTarget,&m_DepthBufferOrigMSAA,false,-1,true);FX_PushRenderTarget(1,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(0,ZTarget); D3D9Device->SetRenderTarget(1,SceneNormal);D3D9Device->SetRenderTarget(0,SceneNormal);//错误
D3D9Device->SetRenderTarget(0,ZTarget); D3D9Device->SetRenderTarget(1,SceneNormal);D3D9Device->SetRenderTarget(1,0); D3D9Device->SetRenderTarget(0,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相关推荐
- Jquery实现英雄联盟游戏查找页面出现的bug及解决方案
JQuery实现英雄联盟英雄查找页面出现的bug汇总 1.on.("click","li,function(){ })绑定li中button按钮重复根据li点击次数重复执 ...
- 地图大量数据查询与渲染——bug及解决方案
本文记录大数据可视化项目中信息查询过程遇到的实际问题及解决方案,用到了Vue自定义组件.Promise.all.DocumentFragment.event loop等. 项目需求 项目使用的arcg ...
- uniapp图片 image图片地址渲染bug(我也不确定是否属于bug,看官方回复0.0)
测试代码如下,点击按钮后对比一下img和image图片显示 测试环境是H5浏览器 项目初始运行图 点击按钮后可以明显看到打印出来的url路径是空,可是 image渲染的路径却没有变. 我目前的解决方法 ...
- Ubuntu使用splint查找C代码的BUG
1 安装splint sudo apt-get install splint 2 测试代码main.c如下 #include <stdio.h>// 全局变量,所有函数公用的 int gl ...
- 千年虫”bug归来,新一代程序员将如何解决
新的十年开始了. 二十年前,在千禧之年钟声敲响的时候,诸多 Y2K 应急队的程序员坐在电脑前惴惴不安,他们此前刚刚用最简单易行的 "懒人方法" 修补了一个被称为"千年虫& ...
- 你还在等着用户反馈BUG?
译者按: 等待用户反馈BUG,一切都晚了!实时监控线上应用才是王道. 原文: Why relying on your users to report errors is the dumbest thi ...
- react-template 包含客户端,服务端渲染完整示例
原文链接 React version 16.2 版本脚手架 包含客户端,服务端渲染完整示例,使用了最新的react,并实现version 16.2 最新的服务端渲染; 解决了一些之前的服务端渲染bug ...
- 在nocdb转pdb的时候遇到小bug
在nocdb转为pdb之后,发现有一个应用账号.从pdb使用expdp导出.导入其他nocdb.报错ORA-01917: user or role 'HUE' does not exist [orac ...
- Bug 险中求: 作为新手,我怎样才能快速找到不和别人重复的第一个 bug?
聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 当 Katie Paxton-Fear (@InsiderPhD) 第一次受邀参加在伦敦举办的 HackerOne 现场活动时,她未曾 ...
最新文章
- 【linux】Valgrind工具集详解(十二):DHAT:动态堆分析器
- android读取SDCard任意路径下的文件
- 三十二、数据库设计的三范式【完】
- 售后服务成OA品牌竞争重要因素
- 机器学习算法源码全解析(三)-范数规则化之核范数与规则项参数选择
- Java客户端操作HBase:创建表代码示例
- C#(WinForm) + MySQL的中文编码问题(MySQL中文编码的终极解决方案)
- NumPy快速入门-- Less 基础/线性代数
- mysql 变量生命周期_Go: 延长变量的生命周期
- QT中调用shell或外部命令
- 根据IP查询城市(基于ipdb库)
- 需要视频素材?这个6个网站就够了
- <POSTGRESQL修炼之道:从小工到专家>之逻辑结构管理(1-5节)
- java中math是什么意思,java中的Math种
- H3C交换机关闭STP生成树协议的方法
- 个税APP优化解决方案
- 计算机爱好特长范文,【介绍个人性格爱好特长】_自我介绍(特长爱好)概述范文...
- 涂鸦智能进击南美取暖器市场
- 2032: [蓝桥杯2022初赛] 顺子日期
- 【fake location破解版】加强版随风2.0定位助手使用方法
热门文章
- python抽奖程序_Python编写抽奖式随机提问程序
- python中pandas是指什么_Python中的神器Pandas,但是有人说Pandas慢...
- java图片简单爬虫_[Java教程]使用jsoup进行简单的爬虫操作爬取图片
- bitherj java_比太钱包为什么从 Bitcoinj 切换到了 Bitherj ?比太钱包从 Bitcoinj 切换到了 Bitherj原因是什么?...
- mysql 时间 sql_MySQL sql语句获取当前日期|时间|时间戳
- 【快速入门Linux】5_Linux命令—远程管理常用命令
- stm32 薄膜键盘原理_铅锤哥:市面上的笔记本键盘优缺点解析,看完秒懂
- Postman中对报文进行AES+Base64加密请求
- linux history 看更多历史记录_Linux内核5.3+将更多支持F2FS
- 本行没有输入值结余隐藏_仓库库存管理系统,内含逻辑公式,自动结余库存!操作简单易上手...