OpenCores
URL https://opencores.org/ocsvn/theia_gpu/theia_gpu/trunk

Subversion Repositories theia_gpu

[/] [theia_gpu/] [branches/] [beta_2.0/] [regressions/] [single_core/] [test_hit.vp] - Rev 230

Compare with Previous | Blame | View Log

// [CORE  0] IP:   38<BT>(             1974300ns JNEX    0029 [ 00020000 fffe0000 fffe0000 ][ 00000002 00140000 00000000 ] =  [ 00000000 00000000 00000000 ])
// [CORE  0] IP:   42(             1974320ns NOP         0000 [ 00000000 00020000 00000009 ][ 00000000 00020000 00000009 ] =  [ 00000000 00000000 00000000 ])
// [CORE  0] IP:   43<BT>(             1974340ns CALL    00b9 [ 00000000 00000000 00000000 ][ xxxxxxxx xxxxxxxx xxxxxxxx ] =  [ 00000000 00000000 00000000 ])
// [CORE  0] IP:  186<WE>(             1974360ns ZERO    0080 [ 00000000 00020000 00000009 ][ 00000000 00020000 00000009 ] =  [ 00000000 00000000 00000000 ])
// [CORE  0] IP:  187<WE>(             1974380ns SETY    0049 [ 00020000 00000000 00000000 ][ 00000000 00020000 00000000 ] =  [ 00000000 00020000 00000000 ])
// [CORE  0] IP:  188<WE>(             1974400ns SUB     0064 [ fffb0000 00040000 00000000 ][ 00050000 00040000 00000000 ] =  [ fff60000 00000000 00000000 ])
// [CORE  0] IP:  189<WE>(             1974420ns SUB     0065 [ fffb0000 fffa0000 00000000 ][ 00050000 00040000 00000000 ] =  [ fff60000 fff60000 00000000 ])
// [CORE  0] IP:  190<WE>(             1974440ns SUB     0058 [ 00000000 00040000 00020000 ][ 00050000 00040000 00000000 ] =  [ fffb0000 00000000 00020000 ])
// [CORE  0] IP:  191<WE>(             1974480ns CROSS   0059 [ fffee6b0 fffe5a08 ffffb9ac ][ fff60000 fff60000 00000000 ] =  [ fffea05c 00015fa4 fffd40b8 ])
// [CORE  0] IP:  192<WE>(             1974520ns CROSS   005a [ fffb0000 00000000 00020000 ][ fff60000 00000000 00000000 ] =  [ 00000000 fff60000 00000000 ])
// [CORE  0] IP:  193<WE>(             1974570ns DOT     0069 [ 00000000 fff60000 00000000 ][ fff60000 fff60000 00000000 ] =  [ 00320000 00320000 00320000 ])
// [CORE  0] IP:  194<WE>(             1974620ns DOT     0047 [ fffea05c 00015fa4 fffd40b8 ][ fffb0000 00000000 00020000 ] =  [ 0000afd2 0000afd2 0000afd2 ])
// [CORE  0] IP:  195<WE>(             1974640ns XCHANGEY        0069 [ 00320000 00320000 00320000 ][ 0000afd2 0000afd2 0000afd2 ] =  [ 00320000 0000afd2 00320000 ])
// [CORE  0] IP:  196<WE>(             1974690ns DOT     0047 [ 00000000 fff60000 00000000 ][ fffee6b0 fffe5a08 ffffb9ac ] =  [ 00083dd8 00083dd8 00083dd8 ])
// [CORE  0] IP:  197<WE>(             1974710ns XCHANGEZ        0069 [ 00320000 0000afd2 00320000 ][ 00083dd8 00083dd8 00083dd8 ] =  [ 00320000 0000afd2 00083dd8 ])
// [CORE  0] IP:  198<WE>(             1974760ns DOT     0066 [ fffea05c 00015fa4 fffd40b8 ][ fff60000 00000000 00000000 ] =  [ 0006de34 0006de34 0006de34 ])
// [CORE  0] IP:  199<WE>(             1975420ns DIV     0063 [ 00320000 0000afd2 00083dd8 ][ 0006de34 0006de34 0006de34 ] =  [ 000e8f71 00003333 00026666 ])
// [CORE  0] IP:  200<BT>(             1975440ns JGEY    00ca [ 000e8f71 00003333 00026666 ][ 00000000 00000000 00000000 ] =  [ 00000000 00000000 00000000 ])
// [CORE  0] IP:  203<BT>(             1975460ns JGEZ    00cd [ 000e8f71 00003333 00026666 ][ 00000000 00000000 00000000 ] =  [ 00000000 00000000 00000000 ])
// [CORE  0] IP:  206<WE>(             1975480ns COPY    0047 [ 000e8f71 00003333 00026666 ][ 00000000 00020000 00000009 ] =  [ 000e8f71 00003333 00026666 ])
// [CORE  0] IP:  207<WE>(             1975500ns SWIZZLE3D       0047 [ 00000002 00000000 00000000 ][ 000e8f71 00003333 00026666 ] =  [ 00026666 00026666 00026666 ])
// [CORE  0] IP:  208<WE>(             1975520ns ADD     0048 [ 00026666 00026666 00026666 ][ 000e8f71 00003333 00026666 ] =  [ 0010f5d7 00029999 0004cccc ])
// [CORE  0] IP:  209<BNT>(             1975540ns JLEY   00d3 [ 0010f5d7 00029999 0004cccc ][ 00000000 00020000 00000000 ] =  [ 00000000 00000000 00000000 ])
// [CORE  0] IP:  210(             1975560ns NOP         0000 [ 00000000 00020000 00000009 ][ 00000000 00020000 00000009 ] =  [ 00000000 00000000 00000000 ])
// [CORE  0] IP:  211<BT><WE>(             1975580ns RET         0076 [ 00000000 00000000 00000000 ][ 00000000 00000000 00000000 ] =  [ 00000000 00000000 00000000 ])
// [CORE  0] IP:   44(             1975620ns NOP         0000 [ 00000000 00020000 00000009 ][ 00000000 00020000 00000009 ] =  [ 00000000 00000000 00000000 ])
// [CORE  0] IP:   45<BT>(             1975640ns JEQX    002e [ 00000000 00000000 00000000 ][ 00000000 00000000 00000000 ] =  [ 00000000 00000000 00000000 ])
// [CORE  0] IP:   47<WE>(             1975660ns DEC     007b [ 00020000 fffe0000 fffe0000 ][ 00000000 00020000 00000009 ] =  [ 00000000 fffc0000 fffc0000 ])
// [CORE  0] IP:   48<BT>(             1975680ns JEQX    0031 [ 00000000 fffc0000 fffc0000 ][ 00000000 00000000 00000000 ] =  [ 00000000 00000000 00000000 ])
// [CORE  0] IP:   50<BT>(             1975700ns JEQX    003d [ 00000000 00000000 00000000 ][ 00000000 00000000 00000000 ] =  [ 00000000 00000000 00000000 ])
// [CORE  0] IP:   62(             1975720ns NOP         0000 [ 00000000 00020000 00000009 ][ 00000000 00020000 00000009 ] =  [ 00000000 00000000 00000000 ])
// [CORE  0] IP:   63<BT>(             1975740ns CALL    013a [ 00000000 00000000 00000000 ][ xxxxxxxx xxxxxxxx xxxxxxxx ] =  [ 00000000 00000000 00000000 ])
// [CORE  0] IP:  315<WE>(             1975780ns OMWRITE         0080 [ 00000000 00000001 00000002 ][ 00000000 00000000 00000000 ] =  [ 00000000 00000000 00000000 ])
// [CORE  0] IP:  316(             1975800ns NOP         0000 [ 00000000 00020000 00000009 ][ 00000000 00020000 00000009 ] =  [ 00000000 00000000 00000000 ])
// [CORE  0] IP:  317<BT><WE>(             1975820ns RET         0076 [ 00000001 00000000 00000000 ][ 00000000 00000000 00000000 ] =  [ 00000001 00000000 00000000 ])
// [CORE  0] IP:   64(             1975860ns NOP         0000 [ 00000000 00020000 00000009 ][ 00000000 00020000 00000009 ] =  [ 00000000 00000000 00000000 ])
// [CORE  0] IP:   65<BT>(             1975880ns CALL    0051 [ 00000000 00000000 00000000 ][ xxxxxxxx xxxxxxxx xxxxxxxx ] =  [ 00000000 00000000 00000000 ])
// [CORE  0] IP:   82<WE>(             1975900ns COPY    007b [ 00000002 00140000 00000000 ][ 00000000 00020000 00000009 ] =  [ 00000002 00140000 00000000 ])
// [CORE  0] IP:   83<WE>(             1975920ns ZERO    006e [ 00000000 00020000 00000009 ][ 00000000 00020000 00000009 ] =  [ 00000000 00000000 00000000 ])
// [CORE  0] IP:   84<WE>(             1975940ns SETX    006e [ 00060000 00000000 00000000 ][ 00000000 00000000 00000000 ] =  [ 00060000 00000000 00000000 ])
// [CORE  0] IP:   85<WE>(             1975960ns ADD     0078 [ 00000000 00000001 00000002 ][ 00000003 00000003 00000003 ] =  [ 00000003 00000004 00000005 ])
// [CORE  0] IP:   86<WE>(             1975980ns ADD     006c [ 00000000 00000000 00000000 ][ 00000003 00000003 00000003 ] =  [ 00000003 00000003 00000003 ])
// [CORE  0] IP:   87<WE>(             1976000ns COPY    0083 [ 00000003 00000003 00000003 ][ 00000000 00020000 00000009 ] =  [ 00000003 00000003 00000003 ])
// [CORE  0] IP:   88<BNT>(             1976020ns JGEX   005a [ 00000000 00000000 00000000 ][ 018e0000 00620000 fffe0000 ] =  [ 00000000 00000000 00000000 ])
// [CORE  0] IP:   89<WE>(             1976040ns INCX    006f [ 00000000 00000000 00000000 ][ 00000000 00020000 00000009 ] =  [ 00020000 00000000 00000000 ])
// [CORE  0] IP:   90<BT><WE>(             1976060ns RET         0076 [ 00000000 00000000 00000000 ][ 00000001 00000000 00000000 ] =  [ 00000000 00000000 00000000 ])
// [CORE  0] IP:   66(             1976100ns NOP         0000 [ 00000000 00020000 00000009 ][ 00000000 00020000 00000009 ] =  [ 00000000 00000000 00000000 ])
// [CORE  0] IP:   67<BNT>(             1976120ns JNEX   0044 [ 00000000 00000000 00000000 ][ 00000000 00000000 00000000 ] =  [ 00000000 00000000 00000000 ])
// [CORE  0] IP:   67<WE>(             1976140ns RETURN  0000 [ 00000001 00000000 00000000 ][ 00000000 00020000 00000009 ] = 


 // [ 00000001 00000001 00000001 ])
 
 
 
 
#define CameraPosition          r51
#define ProjectionWindowScale   r52
#define ProjectionWindowMin     r53
#define RayDirection            r54
#define PrimitiveCount          r55
#define MaxPrimitives           r56
#define Pixel2DPosition         r57
#define Last_t                  r58
#define PixelColor              r59
#define PixelPosition           r60
#define InitialPosition         r61
#define Three                   r62
//#define CurrentOutputPixel      r64
//#define CurrentTextureColor     r65
#define V0                                              r68
#define V1                                              r69
#define V2                                              r60
//#define TextureColor                  r61
#define LastColumn                              r62
#define Pixel2DFinalPosition    r63

#macro C = DotProduct( A, B ) 
        R47 = A * B;
        R47.x = R47.xxx + R47.yyy;
        C = R47.xxx + R47.zzz;
#endmacro

#macro C = CrossProduct( A, B ) 
        R47 = A.yzx * B.zxy;
        R48 = A.zxy * B.yzx;
        C = R47 - R48;
#endmacro


//Specifiy that the code is using scaled fixed point arithmetic by default
using fixed_point_arithmetic;

ProjectionWindowScale   = 0x0000147a;

Pixel2DPosition                 = 0;
ProjectionWindowMin             = 0xfff80000;
ProjectionWindowMin.z   = 0;

CameraPosition = (0,0x00040000,0x00020000);
MaxPrimitives  = 2;
PrimitiveCount = 2;
LastColumn = 10;

V1 = (0xfffb0000, 0x00040000, 0x00000000 );

V0 = (0x00050000, 0x00040000,0x00000000 );

V2 = (0xfffb0000, 0xfffa0000,0x00000000 );  


        Pixel2DFinalPosition.x = 255;
        Pixel2DFinalPosition.y = 255;
        Pixel2DFinalPosition.z = 255;

//----------------------------------------------------------
function main()
 {
        vector Hit,AllDone;
        vector CurrentOutputPixel = (0,1,2);
        vector CurrentTextureColor = (0xa,0xb,0xc);
        
        //Make sure GenerateRay is only called once
         if ( PrimitiveCount == MaxPrimitives )
         {
                 GenerateRay();
                 Hit = 0;
         }
        Hit = CalculateBaricentricIntersection();
        
        PrimitiveCount--;
         if ( PrimitiveCount == 0 )      {      exit ;  }
        
         if (Hit != 0)
         {
                TextureCalculation();
                PrePixelShader();
         } 
        
        PixelShader( CurrentOutputPixel, CurrentTextureColor );
        GenerateNextPixel();
        
         exit ;
}

//----------------------------------------------------------
function GenerateRay()
{
                vector UnnormalizedDirection, tmp;
                
                UnnormalizedDirection = (ProjectionWindowMin + Pixel2DPosition * ProjectionWindowScale  ) - CameraPosition;       
                tmp = UnnormalizedDirection * UnnormalizedDirection;            //tmp = (x^2,y^2,z^2)       
                RayDirection = UnnormalizedDirection / sqrt( tmp.xxx + tmp.yyy + tmp.zzz );

                
         return ;

}
//---------------------------------------------------------------------
function CalculateBaricentricIntersection()
{
        vector E1,E2,T,P,Q,H;
        vector Delta,t;
        
        PixelColor = 0;
        T.y = 1;
        E1 = V1 - V0;                                                   
        E2 = V2 - V0;                                                   
        T = CameraPosition - V0;                                
        P = CrossProduct( RayDirection, E2 );   
        Q = CrossProduct( T, E1 );                      
        H.x = DotProduct(Q,E2);
        H.y = DotProduct(P,T);
        H.z = DotProduct( Q, RayDirection );
        Delta = DotProduct( P, E1 );
        t = H / Delta;          
        
        vector ExpectedResult = (0x000e8f71, 0x00003333, 0x00026666); 
        if ( t != ExpectedResult)
        {
                R66 = 0xdead;
                exit ;
        } else {
                R66 = 0xaced;
        }
        
         if (t.yyy >= 0)                
         {
                 E2.y = E1.zzz + E1;
                 if (E2.yyy > T.yyy)
                 { return 0; }
                
         } else {
                 return 0;
        }
        
        return 1;
}
//---------------------------------------------------------------------
function PixelShader( CurrentOutputPixel, CurrentTextureColor )
{
        //CurrentOutputPixel = CurrentTextureColor;  // What the hell?????
        out [ CurrentOutputPixel ] = CurrentTextureColor.xyz;
        return ;
}
//---------------------------------------------------------------------
function GenerateNextPixel( CurrentOutputPixel, CurrentTextureColor )
{
         PrimitiveCount = MaxPrimitives;
         CurrentTextureColor = 0;
         CurrentOutputPixel += 3;
         
        
         if (Pixel2DPosition.xxx >= LastColumn.xxx )
         {
                 Pixel2DPosition.x++;
                 return 0;
         } else {
                 Pixel2DPosition.x = 0;
                 Pixel2DPosition.y++;
                 if (Pixel2DPosition.yyy == Pixel2DFinalPosition.yyy)
                 {
                         return 1;
                 } else {
                         return 0;
                 }
                
         }
}
//---------------------------------------------------------------------
//Do this calculation only if this triangle is the one closest to the camera
function TextureCalculation()
{
         vector uv_coordinate, fuv, uv1, uv2;
        // vector w1,w2,w3,w4;
        
        // //u_coordinate = U0 + last_u * (U1 - U0) + last_v * (U2 - U0);
        // //v_coordinate = V0 + last_u * (V1 - V0) + last_v * (V2 - V0);
         uv_coordinate = UV0 + last_uv.xxx * (UV1 - UV0) + last_uv.yyy * (UV2 - UV0);
        
        // //fu = (u_coordinate) * gTexture.mWidth
        // //fv = (v_coordinate) * gTexture.mWidth
        fuv.x  = (uv_coordinate) * gTextureSize.xxx;
        
        // //u1 = ((int)fu) % gTexture.mWidth
        // //v1 = ((int)fv) % gTexture.mHeight
        uv1 = integer( fuv ) %  gTextureSize;
        
        // //u2 = (u1 + 1 ) % gTexture.mWidth
        // //v2 = (v2 + 1 ) % gTexture.mHeight
        uv2 = (uv1 + 1) % gTextureSize;
        
        // //Cool now we should store the values in the appropiate registers
        // //TextureOutputCoord1.x = u1 + v1 * gTexture.mWidth
        // //TextureOutputCoord1.y = u2 + v1 * gTexture.mWidth
        // //TextureOutputCoord1.z = 0
        // //TextureOutputCoord2.x = u1 + v2 * gTexture.mWidth
        // //TextureOutputCoord2.y = u2 + v2 * gTexture.mWidth
        // //TextureOutputCoord2.z = 0

        // TextureOutputCoord1.x = uv1.xxx + uv1.yyy * gTextureSize.xxx;
        // TextureOutputCoord1.y = uv2.xxx + uv1.yyy * gTextureSize.xxx;
        // TextureOutputCoord1.z = 0;
        
        // TextureOutputCoord2.x = uv1.xxx + uv2.yyy * gTextureSize.xxx;
        // TextureOutputCoord2.y = uv2.xxx + uv2.yyy * gTextureSize.xxx;
        // TextureOutputCoord2.z = 0;
        
        // //Cool now get the weights
        // //w1.xyz = (1 - fracu) * (1 - fracv)
        // //w2.xyz = fracu * (1 - fracv)
        // //w3.xyz = (1 - fracu) * fracv
        // //w4.xyz = fracu *  fracv
         vector ones = (1,1,1);
         vector fracuv;
        
         fracuv = fraction( fuv );
        
         w1 = ones - fracuv;
         w2 = fracuv * w1.yxz;
         w3 = w2.yyy;
         w2 = w2.xxx;
         w4 = fracuv.xxx * fracuv.yyy;
        
        // //All done, let's get out of here
        return ;
        
}
//---------------------------------------------------------------------
function PrePixelShader()
{
        return ;
}
//---------------------------------------------------------------------

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.