home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 113 / EnigmaAmiga113CD.iso / software / sviluppo / quake_src / d_surfppc.s < prev    next >
Encoding:
Text File  |  2000-06-17  |  5.6 KB  |  236 lines

  1. # Copyright (C) 1996-1997 Id Software, Inc. 
  2. # This program is free software; you can redistribute it and/or 
  3. # modify it under the terms of the GNU General Public License 
  4. # as published by the Free Software Foundation; either version 2 
  5. # of the License, or (at your option) any later version. 
  6. # This program is distributed in the hope that it will be useful, 
  7. # but WITHOUT ANY WARRANTY; without even the implied warranty of 
  8. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.   
  9. # See the GNU General Public License for more details. 
  10. # You should have received a copy of the GNU General Public License 
  11. # along with this program; if not, write to the Free Software 
  12. # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. 
  13.  
  14. ##
  15. ## Quake for AMIGA
  16. ##
  17. ## d_surfPPC.s
  18. ##
  19. ## Define WOS for PowerOpen ABI, otherwise SVR4-ABI is used.
  20. ##
  21.  
  22. .include        "macrosPPC.i"
  23.  
  24. #
  25. # external references
  26. #
  27.  
  28.     xrefa    r_drawsurf
  29.     xrefa    d_lightstylevalue
  30.     xrefv    r_framecount
  31.     xrefv    surfscale
  32.     xrefv    c_surf
  33.  
  34.     xrefv    R_TextureAnimation
  35.     xrefv    R_DrawSurface
  36.     xrefv    D_SCAlloc
  37.  
  38.  
  39. #
  40. # defines
  41. #
  42.  
  43. .set    MSURFACE_VISFRAME   ,0
  44. .set    MSURFACE_DLIGHTFRAME,4
  45. .set    MSURFACE_DLIGHTBITS ,8
  46. .set    MSURFACE_PLANE      ,12
  47. .set    MSURFACE_FLAGS      ,16
  48. .set    MSURFACE_FIRSTEDGE  ,20
  49. .set    MSURFACE_NUMEDGES   ,24
  50. .set    MSURFACE_CACHESPOTS ,28
  51. .set    MSURFACE_TEXTUREMINS,44
  52. .set    MSURFACE_EXTENTS    ,48
  53. .set    MSURFACE_TEXINFO    ,52
  54. .set    MSURFACE_STYLES     ,56
  55. .set    MSURFACE_SAMPLES    ,60
  56. .set    MSURFACE_SIZEOF_EXP ,6
  57. .set    MSURFACE_SIZEOF     ,(1<<MSURFACE_SIZEOF_EXP)
  58.  
  59. .set    DRAWSURF_SURFDAT    ,0
  60. .set    DRAWSURF_ROWBYTES   ,4
  61. .set    DRAWSURF_SURF       ,8
  62. .set    DRAWSURF_LIGHTADJ   ,12
  63. .set    DRAWSURF_TEXTURE    ,28
  64. .set    DRAWSURF_SURFMIP    ,32
  65. .set    DRAWSURF_SURFWIDTH  ,36
  66. .set    DRAWSURF_SURFHEIGHT ,40
  67. .set    DRAWSURF_SIZEOF     ,44
  68.  
  69. .set    SURF_NEXT           ,0
  70. .set    SURF_PREV           ,4
  71. .set    SURF_SPANS          ,8
  72. .set    SURF_KEY            ,12
  73. .set    SURF_LAST_U         ,16
  74. .set    SURF_SPANSTATE      ,20
  75. .set    SURF_FLAGS          ,24
  76. .set    SURF_DATA           ,28
  77. .set    SURF_ENTITY         ,32
  78. .set    SURF_NEARZI         ,36
  79. .set    SURF_INSUBMODEL     ,40
  80. .set    SURF_D_ZIORIGIN     ,44
  81. .set    SURF_D_ZISTEPU      ,48
  82. .set    SURF_D_ZISTEPV      ,52
  83. .set    SURF_SIZEOF_EXP     ,6
  84. .set    SURF_SIZEOF         ,(1<<SURF_SIZEOF_EXP)
  85.  
  86. .set    MTEXINFO_VECS       ,0
  87. .set    MTEXINFO_MIPADJUST  ,32
  88. .set    MTEXINFO_TEXTURE    ,36
  89. .set    MTEXINFO_FLAGS      ,40
  90. .set    MTEXINFO_SIZEOF     ,44
  91.  
  92. .set    SURFCACHE_NEXT      ,0
  93. .set    SURFCACHE_OWNER     ,4
  94. .set    SURFCACHE_LIGHTADJ  ,8
  95. .set    SURFCACHE_DLIGHT    ,24
  96. .set    SURFCACHE_SIZE      ,28
  97. .set    SURFCACHE_WIDTH     ,32
  98. .set    SURFCACHE_HEIGHT    ,36
  99. .set    SURFCACHE_MIPSCALE  ,40
  100. .set    SURFCACHE_TEXTURE   ,44
  101. .set    SURFCACHE_DATA      ,48
  102. .set    SURFCACHE_SIZEOF    ,52
  103.  
  104.  
  105.  
  106.  
  107.  
  108. ###########################################################################
  109. #
  110. #       surfcache_t *D_CacheSurface (msurface_t *surface, int miplevel)
  111. #
  112. ###########################################################################
  113.  
  114.     funcdef    D_CacheSurface
  115.  
  116.     init    0,4,4,1
  117.     stmw    r28,gb(r1)
  118.     stfd    f14,fb(r1)
  119.  
  120.     mr      r31,r3
  121.     mr      r30,r4
  122.     lwz     r3,MSURFACE_TEXINFO(r31)
  123.     lwz     r3,MTEXINFO_TEXTURE(r3)
  124.     call    R_TextureAnimation
  125.     lxa     r29,r_drawsurf
  126.     stw     r3,DRAWSURF_TEXTURE(r29)
  127.     mr      r9,r3
  128.     lxa     r3,d_lightstylevalue
  129.     lbz     r4,MSURFACE_STYLES(r31)
  130.     slwi    r4,r4,2
  131.     lwzx    r5,r3,r4
  132.     stw     r5,DRAWSURF_LIGHTADJ(r29)
  133.     lbz     r4,MSURFACE_STYLES+1(r31)
  134.     slwi    r4,r4,2
  135.     lwzx    r6,r3,r4
  136.     stw     r6,DRAWSURF_LIGHTADJ+1*4(r29)
  137.     lbz     r4,MSURFACE_STYLES+2(r31)
  138.     slwi    r4,r4,2
  139.     lwzx    r7,r3,r4
  140.     stw     r7,DRAWSURF_LIGHTADJ+2*4(r29)
  141.     lbz     r4,MSURFACE_STYLES+3(r31)
  142.     slwi    r4,r4,2
  143.     lwzx    r8,r3,r4
  144.     stw     r8,DRAWSURF_LIGHTADJ+3*4(r29)
  145.     slwi    r0,r30,2
  146.     la      r4,MSURFACE_CACHESPOTS(r31)
  147.     lwzx    r3,r4,r0                #r3 = cache
  148.     mr.     r3,r3
  149.     lw      r28,r_framecount
  150.     beq     .cont2
  151.     lwz     r10,SURFCACHE_DLIGHT(r3)
  152.     cmpwi   cr1,r10,0
  153.     lwz     r12,MSURFACE_DLIGHTFRAME(r31)
  154.     cmpw    cr2,r28,r12
  155.     lwz     r4,SURFCACHE_TEXTURE(r3)
  156.     crandc  eq,4*cr1+eq,4*cr2+eq
  157.     cmpw    cr3,r4,r9
  158.     lwz     r11,SURFCACHE_LIGHTADJ(r3)
  159.     crand   eq,eq,4*cr3+eq
  160.     cmpw    cr4,r11,r5
  161.     lwz     r4,SURFCACHE_LIGHTADJ+1*4(r3)
  162.     crand   eq,eq,4*cr4+eq
  163.     cmpw    cr5,r4,r6
  164.     lwz     r11,SURFCACHE_LIGHTADJ+2*4(r3)
  165.     crand   eq,eq,4*cr5+eq
  166.     cmpw    cr6,r11,r7
  167.     lwz     r4,SURFCACHE_LIGHTADJ+3*4(r3)
  168.     crand   eq,eq,4*cr6+eq
  169.     cmpw    cr7,r4,r8
  170.     crand   eq,eq,4*cr7+eq
  171.     beq     .exit
  172. .cont2:
  173.     mr.     r3,r3
  174.     slwi    r0,r30,23
  175.     lis     r11,0x3f800000@h
  176.     ori     r11,r11,0x3f800000@l
  177.     subf    r0,r0,r11
  178.     stw     r0,local(r1)
  179.     lfs     f14,local(r1)        #f14 = surfscale
  180.     stw     r30,DRAWSURF_SURFMIP(r29)
  181.     lha     r4,MSURFACE_EXTENTS(r31)
  182.     sraw    r4,r4,r30
  183.     stw     r4,DRAWSURF_SURFWIDTH(r29)
  184.     stw     r4,DRAWSURF_ROWBYTES(r29)
  185.     lha     r11,MSURFACE_EXTENTS+1*2(r31)
  186.     sraw    r11,r11,r30
  187.     stw     r11,DRAWSURF_SURFHEIGHT(r29)
  188.     bne     .nocache
  189.     mr      r3,r4
  190.     mullw   r4,r4,r11
  191.     call    D_SCAlloc
  192.     slwi    r4,r30,2
  193.     addi    r0,r4,MSURFACE_CACHESPOTS
  194.     add     r4,r31,r0
  195.     stw     r3,0(r4)
  196.     stw     r4,SURFCACHE_OWNER(r3)
  197.     stfs    f14,SURFCACHE_MIPSCALE(r3)
  198. .nocache:
  199.     lwz     r4,MSURFACE_DLIGHTFRAME(r31)
  200.     cmpw    r4,r28
  201.     bne     .else
  202.     li    r0,1
  203.     stw    r0,SURFCACHE_DLIGHT(r3)
  204.     b       .cont
  205. .else:
  206.     li    r0,0
  207.     stw    r0,SURFCACHE_DLIGHT(r3)
  208. .cont:
  209.     la      r4,SURFCACHE_DATA(r3)
  210.     stw     r4,DRAWSURF_SURFDAT(r29)
  211.     stw     r9,SURFCACHE_TEXTURE(r3)
  212.     stw     r5,SURFCACHE_LIGHTADJ(r3)
  213.     stw     r6,SURFCACHE_LIGHTADJ+1*4(r3)
  214.     stw     r7,SURFCACHE_LIGHTADJ+2*4(r3)
  215.     stw     r8,SURFCACHE_LIGHTADJ+3*4(r3)
  216.     stw     r31,DRAWSURF_SURF(r29)
  217.     lw      r5,c_surf
  218.     mr      r31,r3
  219.     addi    r5,r5,1
  220.     sw      r5,c_surf
  221.     call    R_DrawSurface
  222.     mr      r3,r31
  223.  
  224. .exit:
  225.     lfd    f14,fb(r1)
  226.     lmw    r28,gb(r1)
  227.     exit
  228.  
  229.     funcend    D_CacheSurface
  230.