void main( int argc, char **argv) { char match; char **remArgs; int rv; GrScreenResolution_t resolution = GR_RESOLUTION_640x480; float scrWidth = 640.0f; float scrHeight = 480.0f; int frames = -1; FxBool scrgrab = FXFALSE; char filename[256]; int ftsize = 0; TlTexture baseTexture; unsigned long baseTextureAddr; GrVertex vtxA, vtxB, vtxC, vtxD; FxBool texchroma = FXFALSE; char *extstr; GrProc grTexChromaModeExt = NULL; GrProc grTexChromaRangeExt = NULL; GrColor_t min = 0x00, max = 0x007f7f7f; FxU8 mincolor = 0x00; FxU8 maxcolor = 0x7f; FxFloat red = 1.7f, green = 1.7f, blue = 1.7f; /* Process Command Line Arguments */ while( rv = tlGetOpt( argc, argv, "nrd", &match, &remArgs ) ) { if ( rv == -1 ) { printf( "Unrecognized command line argument\n" ); printf( "%s %s\n", name, usage ); printf( "Available resolutions:\n%s\n", tlGetResolutionList() ); return; } switch( match ) { case 'n': frames = atoi( remArgs[0] ); break; case 'r': resolution = tlGetResolutionConstant( remArgs[0], &scrWidth, &scrHeight ); break; case 'd': scrgrab = FXTRUE; frames = 1; strcpy(filename, remArgs[0]); break; } } tlSetScreen( scrWidth, scrHeight ); version = grGetString( GR_VERSION ); printf( "%s:\n%s\n", name, purpose ); printf( "%s\n", version ); printf( "Resolution: %s\n", tlGetResolutionString( resolution ) ); if ( frames == -1 ) { printf( "Press A Key To Begin Test.\n" ); tlGetCH(); } /* Initialize Glide */ grGlideInit(); assert( hwconfig = tlVoodooType() ); grSstSelect( 0 ); assert( grSstWinOpen( 0, resolution, GR_REFRESH_60Hz, GR_COLORFORMAT_ABGR, GR_ORIGIN_UPPER_LEFT, 2, 1 ) ); tlConSet( 0.0f, 0.0f, 1.0f, 1.0f, 60, 30, 0xffffff ); grVertexLayout(GR_PARAM_XY, GR_VERTEX_X_OFFSET << 2, GR_PARAM_ENABLE); grVertexLayout(GR_PARAM_Q, GR_VERTEX_OOW_OFFSET << 2, GR_PARAM_ENABLE); grVertexLayout(GR_PARAM_ST0, GR_VERTEX_SOW_TMU0_OFFSET << 2, GR_PARAM_ENABLE); grColorCombine( GR_COMBINE_FUNCTION_SCALE_OTHER, GR_COMBINE_FACTOR_ONE, GR_COMBINE_LOCAL_NONE, GR_COMBINE_OTHER_TEXTURE, FXFALSE ); grTexMipMapMode( GR_TMU0, GR_MIPMAP_NEAREST, FXFALSE ); grTexFilterMode( GR_TMU0, GR_TEXTUREFILTER_BILINEAR, GR_TEXTUREFILTER_BILINEAR ); { /* ** texChroma extension */ extension = grGetString(GR_EXTENSION); extstr = strstr(extension, "CHROMARANGE"); if (!strncmp(extstr, "CHROMARANGE", 11)) { grTexChromaModeExt = grGetProcAddress("grTexChromaModeExt"); grTexChromaRangeExt = grGetProcAddress("grTexChromaRangeExt"); } grTexChromaModeExt(GR_TMU0, GR_TEXCHROMA_DISABLE_EXT); grTexChromaRangeExt(0, min, max, GR_TEXCHROMARANGE_RGB_ALL_EXT); } assert( tlLoadTexture( "miro.3df", &baseTexture.info, &baseTexture.tableType, &baseTexture.tableData ) ); /* Download texture data to TMU */ baseTextureAddr = grTexMinAddress( GR_TMU0 ); grTexDownloadMipMap( GR_TMU0, baseTextureAddr, GR_MIPMAPLEVELMASK_BOTH, &baseTexture.info ); if ( baseTexture.tableType != NO_TABLE ) { grTexDownloadTable( baseTexture.tableType, &baseTexture.tableData ); } grTexCombine( GR_TMU0, GR_COMBINE_FUNCTION_LOCAL, GR_COMBINE_FACTOR_NONE, GR_COMBINE_FUNCTION_LOCAL, GR_COMBINE_FACTOR_NONE, FXFALSE, FXFALSE ); grAlphaBlendFunction( GR_BLEND_ONE, GR_BLEND_ZERO, GR_BLEND_ONE, GR_BLEND_ZERO ); grTexSource( GR_TMU0, baseTextureAddr, GR_MIPMAPLEVELMASK_BOTH, &baseTexture.info ); grTexClampMode( GR_TMU0, GR_TEXTURECLAMP_WRAP, GR_TEXTURECLAMP_WRAP); { vtxA.x = tlScaleX( 0.2f ); vtxA.y = tlScaleY( 0.2f ); vtxA.oow = 1.0f; vtxB.x = tlScaleX( 0.8f ); vtxB.y = tlScaleY( 0.2f ); vtxB.oow = 1.0f; vtxC.x = tlScaleX( 0.2f ); vtxC.y = tlScaleY( 0.8f ); vtxC.oow = 1.0f; vtxD.x = tlScaleX( 0.8f ); vtxD.y = tlScaleY( 0.8f ); vtxD.oow = 1.0f; vtxA.tmuvtx[0].sow = 0.f; vtxA.tmuvtx[0].tow = 0.f; vtxB.tmuvtx[0].sow = 255.f; vtxB.tmuvtx[0].tow = 0.f; vtxC.tmuvtx[0].sow = 0.f; vtxC.tmuvtx[0].tow = 255.f; vtxD.tmuvtx[0].sow = 255.f; vtxD.tmuvtx[0].tow = 255.f; } tlConOutput( "Press a key to quit\n" ); tlConOutput( "Press c to turn on/off texture chroma\n" ); tlConOutput( "Press {/} to change max color range\n" ); tlConOutput( "Press [/] to change min color range\n" ); while( frames-- && tlOkToRender()) { char string[256], tmpstr[64]; if (texchroma) strcpy(string, ""); else strcpy(string, ""); sprintf(tmpstr, " (%x,%x,%x) (%x,%x,%x) (%f %f %f) \r", mincolor, mincolor, mincolor, maxcolor, maxcolor, maxcolor,red,green,blue); strcat(string, tmpstr); tlConOutput( string ); if (hwconfig == TL_VOODOORUSH) { tlGetDimsByConst(resolution, &scrWidth, &scrHeight ); grClipWindow(0, 0, (FxU32) scrWidth, (FxU32) scrHeight); } grBufferClear( 0x3f3f3f, 0, 0 ); grDrawTriangle( &vtxA, &vtxB, &vtxD ); grDrawTriangle( &vtxA, &vtxD, &vtxC ); tlConRender(); grBufferSwap( 1 ); /* grab the frame buffer */ if (scrgrab) { if (!tlScreenDump(filename, (FxU16)scrWidth, (FxU16)scrHeight)) printf( "Cannot open %s\n", filename); scrgrab = FXFALSE; } while( tlKbHit() ) { switch( tlGetCH() ) { case 'r': red -= 0.1f; guGammaCorrectionRGB(red, green, blue); break; case 'R': red += 0.1f; guGammaCorrectionRGB(red, green, blue); break; case 'g': green -= 0.1f; guGammaCorrectionRGB(red, green, blue); break; case 'G': green += 0.1f; guGammaCorrectionRGB(red, green, blue); break; case 'b': blue -= 0.1f; guGammaCorrectionRGB(red, green, blue); break; case 'B': blue += 0.1f; guGammaCorrectionRGB(red, green, blue); break; case 'c': case 'C': texchroma = !texchroma; if (texchroma) grTexChromaModeExt(GR_TMU0, GR_TEXCHROMA_ENABLE_EXT); else grTexChromaModeExt(GR_TMU0, GR_TEXCHROMA_DISABLE_EXT); break; case '{': if ((maxcolor > 0x00) && (maxcolor > mincolor)) maxcolor--; max = (maxcolor << 16) | (maxcolor << 8) | maxcolor; grTexChromaRangeExt(0, min, max, GR_TEXCHROMARANGE_RGB_ALL_EXT); break; case '}': if (maxcolor < 0xff) maxcolor++; max = (maxcolor << 16) | (maxcolor << 8) | maxcolor; grTexChromaRangeExt(0, min, max, GR_TEXCHROMARANGE_RGB_ALL_EXT); break; case '[': if (mincolor > 0x00) mincolor--; min = (mincolor << 16) | (mincolor << 8) | mincolor; grTexChromaRangeExt(0, min, max, GR_TEXCHROMARANGE_RGB_ALL_EXT); break; case ']': if ((mincolor < 0xff) && (mincolor < maxcolor)) mincolor++; min = (mincolor << 16) | (mincolor << 8) | mincolor; grTexChromaRangeExt(0, min, max, GR_TEXCHROMARANGE_RGB_ALL_EXT); break; default: frames = 0; break; } } } grGlideShutdown(); return; }
int sage_init (void) { const char *str; if (hardware >= 0) { return (hardware >= GR_SSTTYPE_Voodoo4) ? 32 : 16; } grGlideInit(); if (getInteger(GR_NUM_BOARDS) <= 0) { grGlideShutdown(); return 0; } if (cfg_load("sage.ini") != 0) { cfg_load("/etc/sage.ini"); } grSstSelect(0); hardware = getHardware(); strcpy(renderer_name, "SAGE "); str = grGetString(GR_RENDERER); strcat(renderer_name, str); strcat(renderer_name, " "); str = grGetString(GR_VERSION); strcat(renderer_name, str); str = grGetString(GR_EXTENSION); hwext_texuma = (strstr(str, "TEXUMA") != NULL); hwext_texmirror = (strstr(str, "TEXMIRROR") != NULL); hwext_fogcoord = (strstr(str, "FOGCOORD") != NULL); hwext_texfmt = (strstr(str, "TEXFMT") != NULL); hwext_pixext = (strstr(str, "PIXEXT") != NULL); hwext_combine = (strstr(str, "COMBINE") != NULL); *(GrProc *)&gfGetRegistryOrEnvironmentStringExt = grGetProcAddress("grGetRegistryOrEnvironmentStringExt"); *(GrProc *)&gfSstWinOpenExt = grGetProcAddress("grSstWinOpenExt"); *(GrProc *)&gfBufferClearExt = grGetProcAddress("grBufferClearExt"); *(GrProc *)&gfColorMaskExt = grGetProcAddress("grColorMaskExt"); *(GrProc *)&gfStencilFuncExt = grGetProcAddress("grStencilFuncExt"); *(GrProc *)&gfStencilMaskExt = grGetProcAddress("grStencilMaskExt"); *(GrProc *)&gfStencilOpExt = grGetProcAddress("grStencilOpExt"); *(GrProc *)&gfColorCombineExt = grGetProcAddress("grColorCombineExt"); *(GrProc *)&gfAlphaCombineExt = grGetProcAddress("grAlphaCombineExt"); *(GrProc *)&gfTexColorCombineExt = grGetProcAddress("grTexColorCombineExt"); *(GrProc *)&gfTexAlphaCombineExt = grGetProcAddress("grTexAlphaCombineExt"); *(GrProc *)&gfConstantColorValueExt = grGetProcAddress("grConstantColorValueExt"); current = NULL; opengl_ver = cfg_get("3dfx.opengl.version", NULL); return (hardware >= GR_SSTTYPE_Voodoo4) ? 32 : 16; }
void main( int argc, char **argv) { GrScreenResolution_t resolution = GR_RESOLUTION_640x480; float scrWidth = 640.0f; float scrHeight = 480.0f; long val4[4]; long * histbuffer; long histsize; const char * str; int ret; int i; int failures = 0; int warnings = 0; GrProc func; GrContext_t gc = 0; /* Initialize Glide */ grGlideInit(); assert( hwconfig = tlVoodooType() ); /* Process Command Line Arguments */ tlSetScreen( scrWidth, scrHeight ); version = grGetString( GR_VERSION ); printf("Test 37 - grGet() Stress Test. All output goes to the Console.\n\n"); tlGetCH (); /* Test the Num Boards Call before we do the win open*/ TestGet("GR_NUM_BOARDS", GR_NUM_BOARDS, 1 , &val4[0], &failures); grSstSelect( 0 ); gc = grSstWinOpen( tlGethWnd(), resolution, GR_REFRESH_60Hz, GR_COLORFORMAT_ABGR, GR_ORIGIN_UPPER_LEFT, 2, 1 ); if (!gc) { printf("Could not allocate glide fullscreen context.\n"); goto __errExit; } tlConSet( 0.0f, 0.0f, 1.0f, 1.0f, 60, 30, 0xffffff ); /*do the 4 byte grGet()'s*/ TestGet("GR_BITS_DEPTH", GR_BITS_DEPTH, 1 , &val4[0], &failures); if(val4[0]!=CORRECT_GR_BITS_DEPTH) { printf("WARNING : Value returned was not not equal to %d\n",CORRECT_GR_BITS_DEPTH); warnings++; } TestGet("GR_BITS_GAMMA", GR_BITS_GAMMA, 1 , &val4[0], &failures); if(val4[0]<CORRECT_GR_BITS_GAMMA) { printf("WARNING : Value returned was less than expected\n"); warnings++; } TestGet("GR_FOG_TABLE_ENTRIES", GR_FOG_TABLE_ENTRIES, 1 , &val4[0], &failures); if(val4[0]<CORRECT_GR_FOG_TABLE_ENTRIES) { printf("WARNING : Value returned was less than expected\n"); warnings++; } TestGet("GR_GAMMA_TABLE_ENTRIES", GR_GAMMA_TABLE_ENTRIES, 1 , &val4[0], &failures); if(val4[0]<CORRECT_GR_GAMMA_TABLE_ENTRIES) { printf("WARNING : Value returned was less than expected\n"); warnings++; } TestGet("GR_IS_BUSY", GR_IS_BUSY, 1 , &val4[0], &failures); if(val4[0]!=FXTRUE && val4[0]!=FXFALSE) { printf("WARNING : Value returned was not FXTRUE or FXFALSE\n"); warnings++; } TestGet("GR_LFB_PIXEL_PIPE", GR_LFB_PIXEL_PIPE, 1 , &val4[0], &failures); if(val4[0]!=FXTRUE && val4[0]!=FXFALSE) { printf("WARNING : Value returned was not FXTRUE or FXFALSE\n"); warnings++; } TestGet("GR_MAX_TEXTURE_SIZE", GR_MAX_TEXTURE_SIZE, 1 , &val4[0], &failures); if(val4[0]<CORRECT_GR_MAX_TEXTURE_SIZE) { printf("WARNING : Value returned was less than expected\n"); warnings++; } TestGet("GR_MAX_TEXTURE_ASPECT_RATIO", GR_MAX_TEXTURE_ASPECT_RATIO, 1 , &val4[0], &failures); if(val4[0]<CORRECT_GR_MAX_TEXTURE_ASPECT_RATIO) { printf("WARNING : Value returned was less than expected\n"); warnings++; } TestGet("GR_NON_POWER_OF_TWO_TEXTURES", GR_NON_POWER_OF_TWO_TEXTURES, 1 , &val4[0], &failures); if(val4[0]!=FXTRUE && val4[0]!=FXFALSE) { printf("WARNING : Value returned was not FXTRUE or FXFALSE\n"); warnings++; } TestGet("GR_NUM_FB", GR_NUM_FB, 1 , &val4[0], &failures); if(val4[0]>CORRECT_GR_NUM_FB) { printf("WARNING : Value returned was greater than %d\n",CORRECT_GR_NUM_FB); warnings++; } TestGet("GR_NUM_TMU", GR_NUM_TMU, 1 , &val4[0], &failures); if(val4[0]<CORRECT_GR_NUM_TMU) { printf("WARNING : Value returned was less than %d\n",CORRECT_GR_NUM_TMU); warnings++; } TestGet("GR_SUPPORTS_PASSTHRU", GR_SUPPORTS_PASSTHRU, 1 , &val4[0], &failures); if(val4[0]!=FXTRUE && val4[0]!=FXFALSE) { printf("WARNING : Value returned was not FXTRUE or FXFALSE\n"); warnings++; } TestGet("GR_TEXTURE_ALIGN", GR_TEXTURE_ALIGN, 1 , &val4[0], &failures); if(val4[0]<CORRECT_GR_TEXTURE_ALIGN) { printf("WARNING : Value returned was less than expected\n"); warnings++; } /*Now do the ones we cant verify*/ TestGet("GR_GLIDE_STATE_SIZE", GR_GLIDE_STATE_SIZE, 1 , &val4[0], &failures); TestGet("GR_GLIDE_VERTEXLAYOUT_SIZE", GR_GLIDE_VERTEXLAYOUT_SIZE, 1 , &val4[0], &failures); TestGet("GR_MEMORY_FB", GR_MEMORY_FB, 1 , &val4[0], &failures); TestGet("GR_MEMORY_TMU", GR_MEMORY_TMU, 1 , &val4[0], &failures); TestGet("GR_MEMORY_UMA", GR_MEMORY_UMA, 1 , &val4[0], &failures); TestGet("GR_NUM_SWAP_HISTORY_BUFFER", GR_NUM_SWAP_HISTORY_BUFFER, 1 , &val4[0], &failures); TestGet("GR_PENDING_BUFFERSWAPS", GR_PENDING_BUFFERSWAPS, 1 , &val4[0], &failures); TestGet("GR_REVISION_FB", GR_REVISION_FB, 1 , &val4[0], &failures); TestGet("GR_REVISION_TMU", GR_REVISION_TMU, 1 , &val4[0], &failures); TestGet("GR_STATS_LINES", GR_STATS_LINES, 1 , &val4[0], &failures); TestGet("GR_STATS_PIXELS_AFUNC_FAIL", GR_STATS_PIXELS_AFUNC_FAIL, 1 , &val4[0], &failures); TestGet("GR_STATS_PIXELS_CHROMA_FAIL", GR_STATS_PIXELS_CHROMA_FAIL, 1 , &val4[0], &failures); TestGet("GR_STATS_PIXELS_DEPTHFUNC_FAIL", GR_STATS_PIXELS_DEPTHFUNC_FAIL, 1 , &val4[0], &failures); TestGet("GR_STATS_PIXELS_IN", GR_STATS_PIXELS_IN, 1 , &val4[0], &failures); TestGet("GR_STATS_PIXELS_OUT", GR_STATS_PIXELS_OUT, 1 , &val4[0], &failures); TestGet("GR_STATS_POINTS", GR_STATS_POINTS, 1 , &val4[0], &failures); TestGet("GR_STATS_TRIANGLES_IN", GR_STATS_TRIANGLES_IN, 1 , &val4[0], &failures); TestGet("GR_STATS_TRIANGLES_OUT", GR_STATS_TRIANGLES_OUT, 1 , &val4[0], &failures); /*Now do 8 byte grGet()'s*/ TestGet("GR_WDEPTH_MIN_MAX", GR_WDEPTH_MIN_MAX, 2 , &val4[0], &failures); if(val4[0]>val4[1]) { printf("WARNING : Value[0] returned was greater than Value[1]\n"); warnings++; } TestGet("GR_ZDEPTH_MIN_MAX", GR_ZDEPTH_MIN_MAX, 2 , &val4[0], &failures); if(val4[0]<val4[1]) { printf("WARNING : Value[0] returned was less than Value[1]\n"); warnings++; } /*Now do the ones we cant verify*/ TestGet("GR_FIFO_FULLNESS", GR_FIFO_FULLNESS, 2 , &val4[0], &failures); TestGet("GR_VIDEO_POSITION", GR_VIDEO_POSITION, 2 , &val4[0], &failures); /* Now do 16 byte grGet()*/ TestGet("GR_BITS_RGBA", GR_BITS_RGBA, 4 , &val4[0], &failures); if((val4[0]!=CORRECT_GR_BITS_RGBA_R) | (val4[1]!=CORRECT_GR_BITS_RGBA_G) | (val4[2]!=CORRECT_GR_BITS_RGBA_B) | (val4[3]!=CORRECT_GR_BITS_RGBA_A) ) { printf("WARNING : Values returned were not in range expected\n"); warnings++; } TestGet("GR_VIEWPORT", GR_VIEWPORT, 4 , &val4[0], &failures); if((val4[0]!=CORRECT_GR_VIEWPORT_X) | (val4[1]!=CORRECT_GR_VIEWPORT_Y) | (val4[2]!=CORRECT_GR_VIEWPORT_WIDTH) | (val4[3]!=CORRECT_GR_VIEWPORT_HEIGHT)){ printf("WARNING : Values returned were not in range expected\n"); warnings++; } /* Now do the Swap History Test*/ ret = grGet(GR_NUM_SWAP_HISTORY_BUFFER, sizeof(histsize), &histsize ); if(ret==sizeof(histsize)) { histbuffer = malloc(histsize*sizeof(long)); ret = grGet(GR_SWAP_HISTORY, histsize*sizeof(long), histbuffer ); if(ret==(int)(histsize*sizeof(long))) printf("Success(%d) - ",ret); else { printf("Failed (%d) - ", ret); failures++; } printf("GR_SWAP_HISTORY Result = "); for(i=0;i<histsize;i++) { printf("%d ", histbuffer[i]); } printf("\n", histbuffer[i]); free(histbuffer); } else { printf("GR_NUM_SWAP_HISTORY_BUFFER failed, so unable to call GR_SWAP_HISTORY\n"); } /* Now Test The GetString Calls*/ TestGetString("GR_HARDWARE", GR_HARDWARE, &failures); TestGetString("GR_RENDERER", GR_RENDERER, &failures); TestGetString("GR_VENDOR", GR_VENDOR, &failures); TestGetString("GR_VERSION", GR_VERSION, &failures); TestGetString("GR_EXTENSION", GR_EXTENSION, &failures); str = grGetString(GR_EXTENSION); if(strstr(str,"CHROMARANGE")) { /*try and do the getprocaddress calls for Chromarange*/ func = grGetProcAddress ( "grChromaRangeModeExt"); if(!func) { printf("GetProcAddress for grChromaRangeModeExt Failed\n"); failures++; } func = grGetProcAddress ( "grChromaRangeExt"); if(!func) { printf("GetProcAddress for grChromaRangeExt Failed\n"); failures++; } } if(strstr(str,"TEXCHROMA")) { /* try and do the getprocaddress calls for TexChroma*/ func = grGetProcAddress ( "grTexChromaModeExt"); if(!func) { printf("GetProcAddress for grTexChromaModeExt Failed\n"); failures++; } func = grGetProcAddress ( "grTexChromaRangeExt"); if(!func) { printf("GetProcAddress for grTexChromaRangeExt Failed\n"); failures++; } } if(failures) printf("\n%d failures encountered during this test\n",failures); else printf("\ntesting complete - no failures reported\n"); if(warnings) printf("%d warnings encountered during this test\n",warnings); else printf("testing complete - no warnings reported\n"); __errExit: grGlideShutdown(); return; } /* main */