游戏开发论坛

 找回密码
 立即注册
搜索
查看: 7222|回复: 10

请问:这段代码中加了_pp是什么意思?

[复制链接]

106

主题

743

帖子

745

积分

高级会员

Rank: 4

积分
745
QQ
发表于 2007-10-24 20:57:00 | 显示全部楼层 |阅读模式
请问:这段代码中加了_pp是什么意思?
    ps_3_0
    def c0, 0.5, 2, 0.00100000005, 1
    def c1, 0.00033333333, 0, 0.800000012, 0
    dcl_texcoord_pp v0.w
    dcl_texcoord1_pp v1.xy
    dcl_texcoord2_pp v2.xyz
    dcl_texcoord3_pp v3
    dcl_texcoord4_pp v4.xyz
    dcl_color_pp v5
    dcl_color1_pp v6.xyz
    dcl_2d s5
    add_pp r1.w, -v4.y, c0.y
    max_pp r1.xy, c16, v4.x
    min_pp r0.xy, r1.w, r1
    mul_pp r2.w, v0.w, c1.x
    add_pp r0.w, -r0.x, r0.y
    mul_pp r0.xyz, r0.w, c14
    mov r1.zw, c0
    mad r0.w, c13.x, r1.z, r1.w
    mul_pp r2.xyz, r0.w, c20
    mul_pp r1.xyz, r0.w, c12
    mul_pp r3.xyz, r2, c0.z
    dp3_pp r0.w, c6, v2
    mad_pp r1.w, r0.w, c0.x, c0.x
    mov_pp r2.xyz, v5
    add_pp r2.xyz, -r2, v6
    dp3_sat_pp r0.w, v2, c15
    mad_pp r2.xyz, r1.w, r2, v5
    mad_pp r0.xyz, r0, r0.w, r3
    mad_pp r1.xyz, r1, v4.z, r2
    add_pp r3.xyz, r0, r1
    frc_pp r1.xy, v3
    mov_pp r0, v3
    mad r1.xy, r0.zwzw, r1, v1
    mad r2.xy, r0.zwzw, r0, v1
    dsx r0.xy, r2
    dsy r2.xy, r2
    texldd_pp r0, r1, s5, r0, r2
    mad_pp r1.xyz, r3, -r0, c8
    mad_sat_pp r1.w, v0.w, c9.x, c9.y
    mul_pp r2.xyz, r3, r0
    pow_pp r0.w, r1.w, c9.z
    mad_pp r0.xyz, r3, -r0, c10
    mul_pp r0.w, r0.w, c8.w
    mad_pp r1.xyz, r0.w, r1, r2
    mad_pp r2.xyz, v5.w, r0, r2
    max_pp r0.w, r2.w, c1.y
    lrp_pp r0.xyz, c9.w, r1, r2
    min_pp r1.w, r0.w, c1.z
    mul r0.xyz, r0, c11.x
    add r0.w, -r1.w, c0.w
    exp r0.x, r0.x
    exp r0.y, r0.y
    exp r0.z, r0.z
    mad_pp oC0.w, c7.x, r0.w, r1.w
    add_pp oC0.xyz, -r0, c0.w

8

主题

390

帖子

390

积分

中级会员

Rank: 3Rank: 3

积分
390
发表于 2007-10-24 22:45:00 | 显示全部楼层

Re:请问:这段代码中加了_pp是什么意思?

yessssssssssssssssssssss,找到解释了,pp是Partial Precision的意思。

Specifying Full or Partial Precision
Both ps_3_0 and ps_2_x provide support for two levels of precision:

ps_3_0 ps_2_0 Precision Value
x  Full fp32 or higher
x  Partial precision fp16=s10e5
x x Full fp24=s16e7 or higher
x x Partial precision fp16=s10e5

ps_3_0 supports more precision than ps_2_0 does. By default, all operations occur at the full precision level.

Partial precision (see Modifiers for ps_2_0 and Above) is requested by adding the _pp modifier to shader code (provided that the underlying implementation supports it). Implementations are always free to ignore the modifier and perform the affected operations in full precision.

The _pp modifier can occur in two contexts:

On a texture coordinate declaration to pass partial-precision texture coordinates to the pixel shader. This could be used when texture coordinates relay color data to the pixel shader, which may be faster with partial precision than with full precision in some implementations.
On any instruction to request the use of partial precision, including texture load instructions. This indicates that the implementation is allowed to execute the instruction with partial precision and store a partial-precision result. In the absence of an explicit modifier, the instruction must be performed at full precision (regardless of the precision of the input operands).


check this


http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/directx9_c_Summer_04/directx/graphics/programmingguide/programmablepipeline/hlsl/shadermodel3/shadermodel3.asp

8

主题

390

帖子

390

积分

中级会员

Rank: 3Rank: 3

积分
390
发表于 2007-10-24 22:48:00 | 显示全部楼层

Re:请问:这段代码中加了_pp是什么意思?

看这失落的星球的一shader 好复杂
ps_3_0
    def c39, 1, -0.517647088, -0.509803951, -0.5
    def c40, 0, 0.00392156886, 0, 0
    dcl_texcoord_pp v0
    dcl_texcoord1 v1.xyz
    dcl_texcoord2_pp v2.xy
    dcl_texcoord3_pp v3.xyz
    dcl_texcoord4_pp v4.xyz
    dcl_texcoord5_pp v5.xyz
    dcl_2d s0
    dcl_2d s1
    dcl_2d s2
    dcl_cube s3
    texld_pp r0, v2, s1
    add r0.xyz, r0.xyww, c39.yzww
    add_pp r0.xyz, r0, r0
    mul_pp r0.w, r0.z, r0.x
    mad r0.z, r0.w, -r0.w, c39.x
    mad r0.z, r0.y, -r0.y, r0.z
    rsq r0.z, r0.z
    rcp_pp r1.w, r0.z
    mul_pp r1.xyz, r0.y, v4
    add r0.xyz, v1, -c31
    mad_pp r1.xyz, r0.w, v3, r1
    dp3 r0.w, r0, r0
    mad_pp r2.xyz, r1.w, v5, r1
    rsq r3.w, r0.w
    nrm_pp r1.xyz, r2
    mul r5.xyz, r0, r3.w
    dp3 r0.z, r5, r1
    add r0.w, -r0.z, c39.x
    mul r0.y, r0.w, r0.w
    mul r0.y, r0.y, r0.y
    mul r0.w, r0.w, r0.y
    mad_sat r0.w, r0.w, c37.x, c37.y
    add r0.z, r0.z, r0.z
    add r0.w, -r0.w, c39.x
    mad_pp r0.xyz, r1, -r0.z, r5
    mul_pp r4.w, r0.w, v0.w
    if b0
      add r2.xyz, -v1, c1
      dp3 r1.w, r2, r2
      rsq r2.w, r1.w
      mad r4.xyz, r2, r2.w, -r5
      nrm r3.xyz, r4
      dp3 r0.w, r1, r3
      mad r1.w, r1.w, r2.w, -c0.w
      mul r2.xyz, r2, r2.w
      mul_sat r2.w, r1.w, c1.w
      dp3 r1.w, -c2, r2
      add r2.w, -r2.w, c39.x
      add r1.w, r1.w, -c3.x
      dp3 r2.y, r1, r2
      mul r2.z, r1.w, c3.y
      max r1.w, r2.y, c40.x
      max r3.z, c3.w, r2.z
      mul r1.w, r2.w, r1.w
      min r2.w, r3.z, c39.x
      mul r1.w, r1.w, r2.w
      max r2.w, r0.w, c40.x
      pow r0.w, r2.w, c37.z
      mul_pp r3.xyz, r1.w, c0
      mul_pp r2.xyz, r0.w, r3
      mul_pp r3.xyz, r3, c3.z
      if b1
        add r4.xyz, -v1, c5
        dp3 r1.w, r4, r4
        rsq r2.w, r1.w
        mad r7.xyz, r4, r2.w, -r5
        nrm r6.xyz, r7
        dp3 r0.w, r1, r6
        mad r1.w, r1.w, r2.w, -c4.w
        mul r4.xyz, r4, r2.w
        mul_sat r2.w, r1.w, c5.w
        dp3 r1.w, -c6, r4
        add r2.w, -r2.w, c39.x
        add r1.w, r1.w, -c7.x
        dp3 r4.z, r1, r4
        mul r5.w, r1.w, c7.y
        max r1.w, r4.z, c40.x
        max r4.z, c7.w, r5.w
        mul r1.w, r2.w, r1.w
        min r2.w, r4.z, c39.x
        mul r1.w, r1.w, r2.w
        max r2.w, r0.w, c40.x
        pow r0.w, r2.w, c37.z
        mul_pp r4.xyz, r1.w, c4
        mad_pp r2.xyz, r0.w, r4, r2
        mad_pp r3.xyz, r4, c7.z, r3
        if b2
          add r4.xyz, -v1, c9
          dp3 r1.w, r4, r4
          rsq r2.w, r1.w
          mad r7.xyz, r4, r2.w, -r5
          nrm r6.xyz, r7
          dp3 r0.w, r1, r6
          mad r1.w, r1.w, r2.w, -c8.w
          mul r4.xyz, r4, r2.w
          mul_sat r2.w, r1.w, c9.w
          dp3 r1.w, -c10, r4
          add r2.w, -r2.w, c39.x
          add r1.w, r1.w, -c11.x
          dp3 r4.z, r1, r4
          mul r5.w, r1.w, c11.y
          max r1.w, r4.z, c40.x
          max r4.z, c11.w, r5.w
          mul r1.w, r2.w, r1.w
          min r2.w, r4.z, c39.x
          mul r1.w, r1.w, r2.w
          max r2.w, r0.w, c40.x
          pow r0.w, r2.w, c37.z
          mul_pp r4.xyz, r1.w, c8
          mad_pp r2.xyz, r0.w, r4, r2
          mad_pp r3.xyz, r4, c11.z, r3
          if b3
            add r4.xyz, -v1, c13
            dp3 r1.w, r4, r4
            rsq r2.w, r1.w
            mad r6.xyz, r4, r2.w, -r5
            nrm r5.xyz, r6
            dp3 r0.w, r1, r5
            mad r1.w, r1.w, r2.w, -c12.w
            mul r4.xyz, r4, r2.w
            mul_sat r2.w, r1.w, c13.w
            dp3 r1.w, -c14, r4
            add r2.w, -r2.w, c39.x
            add r1.w, r1.w, -c15.x
            dp3 r4.z, r1, r4
            mul r5.w, r1.w, c15.y
            max r1.w, r4.z, c40.x
            max r4.z, c15.w, r5.w
            mul r1.w, r2.w, r1.w
            min r2.w, r4.z, c39.x
            mul r1.w, r1.w, r2.w
            max r2.w, r0.w, c40.x
            pow r0.w, r2.w, c37.z
            mul_pp r4.xyz, r1.w, c12
            mad_pp r2.xyz, r0.w, r4, r2
            mad_pp r3.xyz, r4, c15.z, r3
          endif
        endif
      endif
    else
      mov r2.xyz, c40.x
      mov_pp r3.xyz, r2.x
    endif
    if b4
      add r4.xyz, -v1, c24
      dp3 r0.w, r4, r4
      rsq r1.w, r0.w
      mul r4.xyz, r4, r1.w
      mad r0.w, r0.w, r1.w, -c23.w
      dp3 r2.w, r4, r1
      mul_sat r1.w, r0.w, c24.w
      max r0.w, r2.w, c40.x
      add r1.w, -r1.w, c39.x
      mul r0.w, r0.w, r1.w
      mad_pp r3.xyz, c23, r0.w, r3
      if b5
        add r4.xyz, -v1, c26
        dp3 r0.w, r4, r4
        rsq r1.w, r0.w
        mul r4.xyz, r4, r1.w
        mad r0.w, r0.w, r1.w, -c25.w
        dp3 r2.w, r4, r1
        mul_sat r1.w, r0.w, c26.w
        max r0.w, r2.w, c40.x
        add r1.w, -r1.w, c39.x
        mul r0.w, r0.w, r1.w
        mad_pp r3.xyz, c25, r0.w, r3
        if b6
          add r4.xyz, -v1, c28
          dp3 r0.w, r4, r4
          rsq r1.w, r0.w
          mul r4.xyz, r4, r1.w
          mad r0.w, r0.w, r1.w, -c27.w
          dp3 r2.w, r4, r1
          mul_sat r1.w, r0.w, c28.w
          max r0.w, r2.w, c40.x
          add r1.w, -r1.w, c39.x
          mul r0.w, r0.w, r1.w
          mad_pp r3.xyz, c27, r0.w, r3
          if b7
            add r4.xyz, -v1, c30
            dp3 r0.w, r4, r4
            rsq r1.w, r0.w
            mul r4.xyz, r4, r1.w
            mad r0.w, r0.w, r1.w, -c29.w
            dp3 r2.w, r4, r1
            mul_sat r1.w, r0.w, c30.w
            max r0.w, r2.w, c40.x
            add r1.w, -r1.w, c39.x
            mul r0.w, r0.w, r1.w
            mad_pp r3.xyz, c29, r0.w, r3
          endif
        endif
      endif
    endif
    mov_pp r0.w, c38.x
    texldl_pp r0, r0, s3
    max_pp r1.w, r0.w, c40.y
    rcp_pp r0.w, r1.w
    mul_pp r0.xyz, r0, r0.w
    mad_pp r4.xyz, r0, c37.w, r2
    texld_pp r0, v2, s2
    mov r1.w, c39.x
    dp4_pp r5.z, c18, r1
    mul_pp r0.w, r1.y, r1.y
    dp4_pp r5.x, c16, r1
    mul_pp r2, r1.yzzx, r1.xyzz
    dp4_pp r5.y, c17, r1
    dp4_pp r6.z, c21, r2
    dp4_pp r6.x, c19, r2
    dp4_pp r6.y, c20, r2
    mad_pp r0.w, r1.x, r1.x, -r0.w
    add_pp r2.xyz, r5, r6
    mul_pp r1.xyz, r4.w, r0
    mad_pp r0.xyz, c22, r0.w, r2
    mul_pp r2.xyz, r4, r1
    mad_pp r1.xyz, r3, v0.w, r0
    texld_pp r0, v0, s0
    rcp r1.w, r3.w
    add r1.w, r1.w, -c33.x
    max_pp r2.w, r0.w, c35.w
    mul r1.w, r1.w, c33.z
    mul_pp r3.xyz, r2.w, c35
    min r2.w, c34.w, r1.w
    mul_pp r0.xyz, r0, r3
    max r1.w, r2.w, c40.x
    mad_pp r1.xyz, r1, r0, r2
    mul_pp r0.y, r1.w, c36.x
    mov r0.z, c40.x
    cmp_pp r1.w, -c32.x, r0.z, r0.y
    mov r0.z, c39.x
    add r2.w, r0.z, -c35.w
    lrp_pp r0.xyz, r1.w, c34, r1
    max_pp r1.w, r0.w, r2.w
    mul_pp oC0.xyz, r0, -c39.w
    mul_pp oC0.w, r1.w, v0.z

// approximately 261 instruction slots used (5 texture, 256 arithmetic)

0

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2007-10-24 22:49:00 | 显示全部楼层

Re:请问:这段代码中加了_pp是什么意思?

是不是像素位置的意思呢?

8

主题

390

帖子

390

积分

中级会员

Rank: 3Rank: 3

积分
390
发表于 2007-10-24 22:53:00 | 显示全部楼层

继续补充,呵呵

How to use fp16
When using pixel shader 2.0+ assembly, you can ask for 16-bit precision via _ppmodifier
?Modifier applies to instructions
?Modifier applies to inputs
dcl_[pp] dest[.mask]
dcl_ppt0.xyz // declare t0 as partial precision
sub_pp r0, r1, t0 // perform math at fp16

8

主题

390

帖子

390

积分

中级会员

Rank: 3Rank: 3

积分
390
发表于 2007-10-24 22:55:00 | 显示全部楼层

Re:请问:这段代码中加了_pp是什么意思?

是,使用低精度的意思。Partial Precision,低精度,部分精度,不好翻译,呵呵

106

主题

743

帖子

745

积分

高级会员

Rank: 4

积分
745
QQ
 楼主| 发表于 2007-10-25 09:15:00 | 显示全部楼层

Re:请问:这段代码中加了_pp是什么意思?

ReallyBigBug可有相关中文书籍推荐。

8

主题

390

帖子

390

积分

中级会员

Rank: 3Rank: 3

积分
390
发表于 2007-10-25 10:55:00 | 显示全部楼层

Re:请问:这段代码中加了_pp是什么意思?

书店有gpu gems吧,其他的就有问题就google搜索下,很难有时间系统的学一下,哈哈

106

主题

743

帖子

745

积分

高级会员

Rank: 4

积分
745
QQ
 楼主| 发表于 2007-10-25 14:42:00 | 显示全部楼层

Re:请问:这段代码中加了_pp是什么意思?

gpu gems没有找到,发现一本 精通DirectX 3D图形与动画程序设计 ,看目录有这方面内容,准备买来看看。

3

主题

13

帖子

17

积分

新手上路

Rank: 1

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

Re:请问:这段代码中加了_pp是什么意思?

精通DirectX 3D图形与动画程序设计,是王德才的吗? 这本书虽然讲的很全,但是很浅,谈不上精通觉得。倒是适合新手(比如我,哈哈)系统的学习DirectX方面内容和GPU编程(HLSL和ASM)。书之所以厚,都是因为代码太多,非常多的重复代码。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-4-29 13:11

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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