首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 游戏天堂 > 游戏开发 > Pixel Shader 2.x 的问题
【标  题】:Pixel Shader 2.x 的问题
【关键字】:Pixel,Shader,2.x
【来  源】:http://blog.csdn.net/cywater2000/archive/2007/04/20/1571462.aspx

Pixel Shader 2.x 的问题

 
Pixel Shader 2.x 的问题
作者:cywater2000
日期:2007-4-19
来自:http://blog.csdn.net/cywater2000
 
一直以为支持Pixel Shader(以下简称ps)2.0的显卡自然支持2.x,因为D3DPS_VERSION只有(2,0)这个版本号可以检查。事实证明是错误的。
这几天把一个demo放到ATI Radeon X600上跑,结果发现程序始终无法正确运行。调了半天都找不出错误。由于我检查了每个函数的返回值(宏V),所以应该不是API参数没有设对(比如创建的纹理格式不支持)。最后在debug信息窗口中发现了一些线索:
D3DX: ID3DXEffect: Warning! Failed to create shader on this device (probably because shader version is unsupported)
我靠! D3DXCreateEffectFromFile返回值是S_OK啊! WTH!
然后把范围缩小到某个ps程序上。这个程序我是用ps_2_a编译的,难道X 600不支持?于是google之。
果然是这样! 而且ps_2_a与ps_2_b也是不一样的。简单来说,前者是NVIDIA支持的标准,后者是ATI的…
具体的比较可以看这个:
http://en.wikipedia.org//wiki/High_Level_Shader_Language
 
于是有老外戏称使用ps_2_nv与ps_2_at更准确,更有甚者取名为:
ps_2_we_suck_too_much_to_just_make_it_3 (ps_2_a) and ps_2_wtf_we_dont_need_this (ps_2_b) http://forum.beyond3d.com/archive/index.php/t-9653.html
233max
 
实际上大家可以看到ps_2_b差不多可以算2_a的子集(除了temp register),虽然名字靠后一些。
 
因此,如果要检测硬件是否支持ps_2_x,不能光用D3DPS_VERSION(2, 0)来判断。下面给出一个简单的方法:
g_pD3DDevice->GetDeviceCaps(&d3dCaps);
if( d3dCaps.PixelShaderVersion >= D3DPS_VERSION(2, 0) )                              //2.0
{
 if(3dCaps.PS20Caps.Caps & D3DPS20CAPS_NOTEXINSTRUCTIONLIMIT) //2.x
{
    if(d3dCaps.PS20Caps.Caps & D3DPS20CAPS_ARBITRARYSWIZZLE) //2.a
    {
    }
    else //2.b
    {
    }
}
}
 
关于检测硬件信息更详细的例子,可以参考D3D的例子:Config System Sample。
最后说一句:也许DX10的作法是对的,之前的硬件差别确实太大,对开方者来说确实很不方便...
 
sql中字符串型数字排序:【上一篇】
将文本转换成IDirect3DTexture9:【下一篇】
【相关文章】
  • 如何在D3D9中调试shader
  • 最近看了pixeltoastor的代码的总结--基于宏的"适配模式"(Adapter Pattern)
  • How-To Develop EJB 3.0 to Supports Backward Compatibility with EJB 2.x Clients
  • 分享2本CG实时渲染书籍: ShaderX3 与 Physically Based Rendering : From Theory to Implementation 连接已...
  • PECompact 2.x加壳脱壳手记
  • ShaderSimpler(5) : Bump Mapping(Normal mapping)
  • ShaderSimpler(6) : Parallax Mapping
  • 在Pixel Shader 3.0中使用动态流控制(Dynamic Flow Control)
  • ShaderSimpler(4) : 环境映射
  • .NET1.x升级到.NET2.x问题小结
  • 【随机文章】
  • 细读"软交换"
  • Red Hat Linux 7.1的设置与调试
  • 总体了解C#(目录一)
  • 找永康吧!治疗红血丝?根除红血丝的办法?红血丝的治疗
  • 让星空极速自己破解自己
  • 刑警打交警交警闹“罢工”(应该严肃处理)
  • 用ACDSee查看目录下所有图形文件
  • 关于调试
  • cisco3745 IOS丢失恢复过程(客户现场实际记录)
  • 如何解决局域网内盗用IP的问题
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.