r200/r300: get up to speed on renamed files
[mesa.git] / src / mesa / drivers / dri / r200 / r200_fragshader.c
index 70b75266a45eb04ec370fe7716cca77e4016e076..85c1b7bdd19426bcdb5072abe15373a0b77874d2 100644 (file)
  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  *
  **************************************************************************/
-#include "glheader.h"
-#include "macros.h"
-#include "enums.h"
 
+#include "main/glheader.h"
+#include "main/macros.h"
+#include "main/enums.h"
 #include "tnl/t_context.h"
-#include "atifragshader.h"
-#include "program.h"
+#include "shader/atifragshader.h"
+#include "shader/program.h"
 #include "r200_context.h"
 #include "r200_ioctl.h"
 #include "r200_tex.h"
@@ -132,10 +132,10 @@ static void r200UpdateFSArith( GLcontext *ctx )
    R200_STATECHANGE( rmesa, afs[1] );
 
    if (shader->NumPasses < 2) {
-      afs_cmd = rmesa->hw.afs[1].cmd;
+      afs_cmd = (GLuint *) rmesa->hw.afs[1].cmd;
    }
    else {
-      afs_cmd = rmesa->hw.afs[0].cmd;
+      afs_cmd = (GLuint *) rmesa->hw.afs[0].cmd;
    }
    for (pass = 0; pass < shader->NumPasses; pass++) {
       GLuint opnum = 0;
@@ -317,7 +317,7 @@ static void r200UpdateFSArith( GLcontext *ctx )
                SET_INST(opnum, 1), SET_INST_2(opnum, 1));*/
          opnum++;
       }
-      afs_cmd = rmesa->hw.afs[1].cmd;
+      afs_cmd = (GLuint *) rmesa->hw.afs[1].cmd;
    }
    rmesa->afs_loaded = ctx->ATIFragmentShader.Current;
 }
@@ -362,7 +362,7 @@ static void r200UpdateFSRouting( GLcontext *ctx ) {
 
    if (shader->NumPasses < 2) {
       for (reg = 0; reg < R200_MAX_TEXTURE_UNITS; reg++) {
-        struct gl_texture_object *texObj = ctx->Texture.Unit[reg]._Current;
+        GLbitfield targetbit = ctx->Texture.Unit[reg]._ReallyEnabled;
          R200_STATECHANGE( rmesa, tex[reg] );
         rmesa->hw.tex[reg].cmd[TEX_PP_TXMULTI_CTL] = 0;
         if (shader->SetupInst[0][reg].Opcode) {
@@ -385,15 +385,16 @@ static void r200UpdateFSRouting( GLcontext *ctx ) {
               else {
                  txformat_x |= R200_TEXCOORD_PROJ;
               }
+              rmesa->hw.ctx.cmd[CTX_PP_CNTL] |= R200_TEX_0_ENABLE << reg;
            }
-           else if (texObj->Target == GL_TEXTURE_3D) {
+           else if (targetbit == TEXTURE_3D_BIT) {
               txformat_x |= R200_TEXCOORD_VOLUME;
            }
-           else if (texObj->Target == GL_TEXTURE_CUBE_MAP) {
+           else if (targetbit == TEXTURE_CUBE_BIT) {
               txformat_x |= R200_TEXCOORD_CUBIC_ENV;
            }
            else if (shader->SetupInst[0][reg].swizzle == GL_SWIZZLE_STR_ATI ||
-               shader->SetupInst[0][reg].swizzle == GL_SWIZZLE_STQ_ATI) {
+              shader->SetupInst[0][reg].swizzle == GL_SWIZZLE_STQ_ATI) {
               txformat_x |= R200_TEXCOORD_NONPROJ;
            }
            else {
@@ -401,16 +402,16 @@ static void r200UpdateFSRouting( GLcontext *ctx ) {
            }
            rmesa->hw.tex[reg].cmd[TEX_PP_TXFORMAT] = txformat;
            rmesa->hw.tex[reg].cmd[TEX_PP_TXFORMAT_X] = txformat_x;
-           /* is this a good idea? Could potentially sample from not enabled unit.
-              results are probably undefined anyway (?) but I hope it doesn't lock up... */
-           rmesa->hw.ctx.cmd[CTX_PP_CNTL] |= R200_TEX_0_ENABLE << reg;
+           /* enabling texturing when unit isn't correctly configured may not be safe */
+           if (targetbit)
+              rmesa->hw.ctx.cmd[CTX_PP_CNTL] |= R200_TEX_0_ENABLE << reg;
         }
       }
 
    } else {
       /* setup 1st pass */
       for (reg = 0; reg < R200_MAX_TEXTURE_UNITS; reg++) {
-        struct gl_texture_object *texObj = ctx->Texture.Unit[reg]._Current;
+        GLbitfield targetbit = ctx->Texture.Unit[reg]._ReallyEnabled;
         R200_STATECHANGE( rmesa, tex[reg] );
         GLuint txformat_multi = 0;
         if (shader->SetupInst[0][reg].Opcode) {
@@ -425,11 +426,12 @@ static void r200UpdateFSRouting( GLcontext *ctx ) {
               else {
                  txformat_multi |= R200_PASS1_TEXCOORD_PROJ;
               }
+              rmesa->hw.cst.cmd[CST_PP_CNTL_X] |= R200_PPX_TEX_0_ENABLE << reg;
            }
-           else if (texObj->Target == GL_TEXTURE_3D) {
+           else if (targetbit == TEXTURE_3D_BIT) {
               txformat_multi |= R200_PASS1_TEXCOORD_VOLUME;
            }
-           else if (texObj->Target == GL_TEXTURE_CUBE_MAP) {
+           else if (targetbit == TEXTURE_CUBE_BIT) {
               txformat_multi |= R200_PASS1_TEXCOORD_CUBIC_ENV;
            }
            else if (shader->SetupInst[0][reg].swizzle == GL_SWIZZLE_STR_ATI ||
@@ -439,14 +441,15 @@ static void r200UpdateFSRouting( GLcontext *ctx ) {
            else {
               txformat_multi |= R200_PASS1_TEXCOORD_PROJ;
            }
-           rmesa->hw.cst.cmd[CST_PP_CNTL_X] |= R200_PPX_TEX_0_ENABLE << reg;
+           if (targetbit)
+              rmesa->hw.cst.cmd[CST_PP_CNTL_X] |= R200_PPX_TEX_0_ENABLE << reg;
         }
          rmesa->hw.tex[reg].cmd[TEX_PP_TXMULTI_CTL] = txformat_multi;
       }
 
       /* setup 2nd pass */
       for (reg=0; reg < R200_MAX_TEXTURE_UNITS; reg++) {
-        struct gl_texture_object *texObj = ctx->Texture.Unit[reg]._Current;
+        GLbitfield targetbit = ctx->Texture.Unit[reg]._ReallyEnabled;
         if (shader->SetupInst[1][reg].Opcode) {
            GLuint coord = shader->SetupInst[1][reg].src;
            GLuint txformat = rmesa->hw.tex[reg].cmd[TEX_PP_TXFORMAT]
@@ -463,15 +466,16 @@ static void r200UpdateFSRouting( GLcontext *ctx ) {
               else {
                  txformat_x |= R200_TEXCOORD_PROJ;
               }
+              rmesa->hw.ctx.cmd[CTX_PP_CNTL] |= R200_TEX_0_ENABLE << reg;
            }
-           else if (texObj->Target == GL_TEXTURE_3D) {
+           else if (targetbit == TEXTURE_3D_BIT) {
               txformat_x |= R200_TEXCOORD_VOLUME;
            }
-           else if (texObj->Target == GL_TEXTURE_CUBE_MAP) {
+           else if (targetbit == TEXTURE_CUBE_BIT) {
               txformat_x |= R200_TEXCOORD_CUBIC_ENV;
            }
            else if (shader->SetupInst[1][reg].swizzle == GL_SWIZZLE_STR_ATI ||
-               shader->SetupInst[1][reg].swizzle == GL_SWIZZLE_STQ_ATI) {
+              shader->SetupInst[1][reg].swizzle == GL_SWIZZLE_STQ_ATI) {
               txformat_x |= R200_TEXCOORD_NONPROJ;
            }
            else {
@@ -488,7 +492,8 @@ static void r200UpdateFSRouting( GLcontext *ctx ) {
            }
            rmesa->hw.tex[reg].cmd[TEX_PP_TXFORMAT_X] = txformat_x;
            rmesa->hw.tex[reg].cmd[TEX_PP_TXFORMAT] = txformat;
-           rmesa->hw.ctx.cmd[CTX_PP_CNTL] |= R200_TEX_0_ENABLE << reg;
+           if (targetbit)
+              rmesa->hw.ctx.cmd[CTX_PP_CNTL] |= R200_TEX_0_ENABLE << reg;
         }
       }
    }
@@ -505,19 +510,19 @@ static void r200UpdateFSConstants( GLcontext *ctx )
    for (i = 0; i < 8; i++)
    {
       GLubyte con_byte[4];
-      if ((shader->localConstDef >> i) & 1) {
+      if ((shader->LocalConstDef >> i) & 1) {
         CLAMPED_FLOAT_TO_UBYTE(con_byte[0], shader->Constants[i][0]);
         CLAMPED_FLOAT_TO_UBYTE(con_byte[1], shader->Constants[i][1]);
         CLAMPED_FLOAT_TO_UBYTE(con_byte[2], shader->Constants[i][2]);
         CLAMPED_FLOAT_TO_UBYTE(con_byte[3], shader->Constants[i][3]);
       }
       else {
-        CLAMPED_FLOAT_TO_UBYTE(con_byte[0], ctx->ATIFragmentShader.globalConstants[i][0]);
-        CLAMPED_FLOAT_TO_UBYTE(con_byte[1], ctx->ATIFragmentShader.globalConstants[i][1]);
-        CLAMPED_FLOAT_TO_UBYTE(con_byte[2], ctx->ATIFragmentShader.globalConstants[i][2]);
-        CLAMPED_FLOAT_TO_UBYTE(con_byte[3], ctx->ATIFragmentShader.globalConstants[i][3]);
+        CLAMPED_FLOAT_TO_UBYTE(con_byte[0], ctx->ATIFragmentShader.GlobalConstants[i][0]);
+        CLAMPED_FLOAT_TO_UBYTE(con_byte[1], ctx->ATIFragmentShader.GlobalConstants[i][1]);
+        CLAMPED_FLOAT_TO_UBYTE(con_byte[2], ctx->ATIFragmentShader.GlobalConstants[i][2]);
+        CLAMPED_FLOAT_TO_UBYTE(con_byte[3], ctx->ATIFragmentShader.GlobalConstants[i][3]);
       }
-      rmesa->hw.atf.cmd[ATF_TFACTOR_0 + i] = r200PackColor (
+      rmesa->hw.atf.cmd[ATF_TFACTOR_0 + i] = radeonPackColor (
         4, con_byte[0], con_byte[1], con_byte[2], con_byte[3] );
    }
 }