游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2957|回复: 7

为什么我的这段PS代码在PS1.4下通不过,1.4不是支持三个

[复制链接]

51

主题

134

帖子

140

积分

注册会员

Rank: 2

积分
140
发表于 2007-10-17 14:24:00 | 显示全部楼层 |阅读模式
//vs部分省略,没问题

//ps部分:
sampler s0 = sampler_state{Texture=(tex0);MipFilter=LINEAR;MinFilter=LINEAR;MagFilter=LINEAR;};
sampler s1 = sampler_state{Texture=(tex1);MipFilter=LINEAR;MinFilter=LINEAR;MagFilter=LINEAR;};
sampler s2 = sampler_state{Texture=(tex2);MipFilter=LINEAR;MinFilter=LINEAR;MagFilter=LINEAR;};
float4 PS(
        float4 diff  : COLOR,
        float2 Tex0  : TEXCOORD0,
        float2 Tex1  : TEXCOORD1
        ) : COLOR
{
        float4 d1=tex2D(s0,Tex0);
        float4 d2=tex2D(s1,Tex0);
        float4 d3=tex2D(s2,Tex0);
        float4 outf=d1*diff.r+d2*diff.g+d3*diff.b;
        return outf;
}
technique MyShader
{
    pass P0
    {
       
        // shaders
        VertexShader = compile vs_1_0 VS();
        PixelShader  = compile ps_1_1 PS();//用2.0就没问题
    }
}

201

主题

1437

帖子

1963

积分

金牌会员

Rank: 6Rank: 6

积分
1963
QQ
发表于 2007-10-19 21:50:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

7

主题

438

帖子

438

积分

中级会员

Rank: 3Rank: 3

积分
438
发表于 2007-10-20 09:20:00 | 显示全部楼层

Re:为什么我的这段PS代码在PS1.4下通不过,1.4不是支持三个

//
// Generated by Microsoft (R) D3DX9 Shader Compiler 9.12.589.0000
//
//   fxc /T ps_1_4 /E PS ps.fx
//
//
// Parameters:
//
//   sampler2D s0;
//   sampler2D s1;
//   sampler2D s2;
//
//
// Registers:
//
//   Name         Reg   Size
//   ------------ ----- ----
//   s0           s0       1
//   s1           s1       1
//   s2           s2       1
//

    ps_1_4
    texld r0, t0
    texld r1, t0
    texld r2, t0
    mul r1, r1, v0.y
    mad r0, r0, v0.x, r1
    mad r0, r2, v0.z, r0

// approximately 6 instruction slots used (3 texture, 3 arithmetic)

E:\>

-------

不知道你怎么编译的,我反正编译通过。

0

主题

34

帖子

46

积分

注册会员

Rank: 2

积分
46
QQ
发表于 2007-10-20 15:33:00 | 显示全部楼层

Re:为什么我的这段PS代码在PS1.4下通不过,1.4不是支持三个

看了LZ这个程序,两个问题
1
ps_1_1跑这个PS程序应当是超长了,我印象中ps_1_1只能一次tex2D
但是ps_1_4跑这个应该是没有问题的.如果1.4还有问题,那么可能是2

2
如果你的DX SDK版本在2006年8月之后
在D3DXCreateEffectFromFile的第5个参数dwShaderFlags
加上dwShaderFlags |=D3DXSHADER_USE_LEGACY_D3DX9_31_DLL
强制使用老版本编译器可解决问题

如果仍然有问题,就要等楼下解答了

51

主题

134

帖子

140

积分

注册会员

Rank: 2

积分
140
 楼主| 发表于 2007-10-20 19:49:00 | 显示全部楼层

Re: 为什么我的这段PS代码在PS1.4下通不过,1.4不是支持三

1.4下编译通过的,不过好像硬件还是不支持。。。
1.1不行。。。

0

主题

34

帖子

46

积分

注册会员

Rank: 2

积分
46
QQ
发表于 2007-10-20 20:15:00 | 显示全部楼层

Re:为什么我的这段PS代码在PS1.4下通不过,1.4不是支持三个

那症状是什么样子啊?是什么显卡啊?

51

主题

134

帖子

140

积分

注册会员

Rank: 2

积分
140
 楼主| 发表于 2007-10-21 00:29:00 | 显示全部楼层

Re:为什么我的这段PS代码在PS1.4下通不过,1.4不是支持三个

公司的显卡是以前的 Quadro FX貌似只支持到1.1
1.4显示错误,我自己的6100没问题,如果用PixelShader  = compile ps_1_1 PS();的话,因为我之前写了:
        if(FAILED(D3DXCreateEffectFromFile( _device, "terrain.fx", NULL, NULL, 0, NULL, &effect_t, NULL )))
                ::MessageBox(0,"effect_failed",0,0);
所以提示错误信息

还有dwShaderFlags |=D3DXSHADER_USE_LEGACY_D3DX9_31_DLL是什么意思啊 有这种定义DWORD  的方法的吗,这个好想只能RETURN 一个FALSE哦。。。而且也没有D3DXSHADER_USE_LEGACY_D3DX9_31_DLL的define。。。

0

主题

34

帖子

46

积分

注册会员

Rank: 2

积分
46
QQ
发表于 2007-10-22 00:21:00 | 显示全部楼层

Re:为什么我的这段PS代码在PS1.4下通不过,1.4不是支持三个

D3DXSHADER_USE_LEGACY_D3DX9_31_DLL的在2006年8月之后的SDK才有的
原因是新的FXC将D10和D9使用同样的实现,放弃了PS_1_X
D3DXSHADER_USE_LEGACY_D3DX9_31_DLL相当于FXC命令行加LD参数
31是最后一个可以支持PS_1_x的DLL.

dwShaderFlags 之前没值的话就直接dwShaderFlags = D3DXSHADER_USE_LEGACY_D3DX9_31_DLL就可以了
如果写过DWORD dwShaderFlags = D3DXFX_NOT_CLONEABLE之类的
追加的话那肯定就要 dwShaderFlags|=D3DXSHADER_USE_LEGACY_D3DX9_31_DLL了


PS_1_1的话你这个PS确实超长了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-16 04:43

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表