#!/bin/ksh
# Viewperf post processor
# Version 1.1 

SCRIPT=` echo $0 |  awk ' BEGIN {FS="/"} {print $NF} ' `
PROCESS="VIEWSETS"
PRINT_SUMMARY="FALSE"
PRINT_VISUAL_DATA="FALSE"

while [ ! $# = 0 ]
do
	case "$1" in
			# What type of tests will be processed
		"-V")	PROCESS="VIEWSETS" ;;
		"-a")	PROCESS="ALL_TESTS" ;;

			# What type of output format will be used
		"-s")	PRINT_SUMMARY="TRUE" ;;
		"-v")	PRINT_VISUAL_DATA="TRUE" ;;

		"-h")	echo "Usage: $SCRIPT [-V|-a] [-s] [-v] < viewperf_data";
			echo
			echo "  -V   - Process the standard Viewsets (default)."
			echo "  -a   - Process all the tests."
			echo "  -s   - Print the test summary (default)."         
			echo "  -v   - Print the visual information."    
			echo
			exit;;

		*)      echo "What is this ??? '$1'" ;;
	esac
	shift
done

awk '

BEGIN {
	NumVis=14
	Cnt=0

	# Get shell variables...
	PROCESS             = '\"$PROCESS\"'
	PRINT_SUMMARY       = '\"$PRINT_SUMMARY\"'
	PRINT_VISUAL_DATA   = '\"$PRINT_VISUAL_DATA\"'

	# Check to see that at least one print option has been set
	if ( PRINT_SUMMARY ~ /FALSE/ && PRINT_VISUAL_DATA ~ /FALSE/ )  {
		# Nothing has been set, then set the default
		PRINT_SUMMARY="TRUE"
	}

	# Set up lookup table for framebuffer level
	fbl[-4]="U" # Underlays
	fbl[-3]="U"
	fbl[-2]="U"
	fbl[-1]="U"
	fbl[0]="N"  # Normal
	fbl[1]="O"
	fbl[2]="O"
	fbl[3]="O"
	fbl[4]="O"  # Overlays

	# Define output formats for the visual information
	#       id   lvl  db   st   r    g    b    a    db   sb   r    g    b    a
	split( "%7s ,%4s ,%8s ,%7s ,%4s ,%4s ,%4s ,%4s ,%6s ,%6s ,%7s ,%4s ,%4s ,%4s ",  fmt , "," )

        ## Metrics & Weights for CDRS-02 ...
        cdrs_m[1]="-mh mower-wf -rm LINE -cp FRAME -dl -ls -bl -dbf ONE -vz "
        cdrs_w[1]=0.50
        cdrs_m[2]="-mh mower-ts.msh -rm TMESH -cp FRAME -dl -zb -nil 1 -vz "
        cdrs_w[2]=0.20
        cdrs_m[3]="-mh mower-ts.msh -rm TMESH -cp PRIMITIVE -dl -zb -nil 1 -bl -vz "
        cdrs_w[3]=0.15
        cdrs_m[4]="-mh mower-ts.msh -rm TMESH -cp PRIMITIVE -dl -zb -nil 1 -bl -tx flag.mtv -vz "
        cdrs_w[4]=0.08
        cdrs_m[5]="-mh mower-ts.msh -rm TMESH -cp FRAME -dl -zb -nil 1 -txg flag.mtv -te MODULATE -vz "
        cdrs_w[5]=0.05
        cdrs_m[6]="-mh mower-ts.msh -rm TMESH -cp VERTEX -dl -zb -nil 1 -vz "
        cdrs_w[6]=0.02
        cdrs_m[7]="-mh mower-wf.msh -rm VECTOR -cp FRAME -dl -bl -dbf ONE -vz "
        cdrs_w[7]=0.0

        ## Metrics & Weights for DX-02 ...
        dx_m[1]="-mh dx.msh -rm TMESH -cp VERTEX -zb -nil 1 "
        dx_w[1]=0.400000
        dx_m[2]="-mh dx.msh -rm LINE -cp VERTEX -zb -nil 1 "
        dx_w[2]=0.200000
        dx_m[3]="-mh dx.msh -rm TMESH -cp VERTEX -dl -zb -nil 1 "
        dx_w[3]=0.100000
        dx_m[4]="-mh dx.msh -rm POINT -cp VERTEX -zb -nil 1 "
        dx_w[4]=0.080000
        dx_m[5]="-mh dx.msh -rm LINE -cp VERTEX -dl -zb -nil 1 "
        dx_w[5]=0.050000
        dx_m[6]="-mh dx.msh -rm TMESH -cp VERTEX -zb -nil 1 -fn "
        dx_w[6]=0.050000
        dx_m[7]="-mh dx.msh -rm TMESH -cp VERTEX -zb -nil 1 -pp "
        dx_w[7]=0.050000
        dx_m[8]="-mh dx.msh -rm TMESH -cp VERTEX -zb -nil 1 -l2s "
        dx_w[8]=0.025000
        dx_m[9]="-mh dx.msh -rm TMESH -cp VERTEX -zb -nil 1 -c "
        dx_w[9]=0.025000
        dx_m[10]="-mh dx.msh -rm POINT -cp VERTEX -dl -zb -nil 1 "
        dx_w[10]=0.020000

        drv_01_m[1]="-mh gyda1-ts.msh -rm TMESH -cp PRIMITIVE -zb -nil 1 -vz "
        drv_01_w[1]=0.38
        drv_01_m[2]="-mh gyda2-ts.msh -rm TMESH -cp PRIMITIVE -zb -f -nil 1 -fn -vz "
        drv_01_w[2]=0.30
        drv_01_m[3]="-mh gyda1-ts.msh -rm TMESH -cp PRIMITIVE -zb -nil 1 -c -vz "
        drv_01_w[3]=0.08
        drv_01_m[4]="-mh gyda2-ts.msh -rm TMESH -cp PRIMITIVE -zb -f -nil 1 -fn -c -vz "
        drv_01_w[4]=0.05
        drv_01_m[5]="-mh gyda0-wf.msh -rm LINE -cp PRIMITIVE -zb -f -vz "
        drv_01_w[5]=0.05
        drv_01_m[6]="-mh gyda2-ts.msh -rm TMESH -cp PRIMITIVE -zb -f -nil 1 -fn -pp -vz "
        drv_01_w[6]=0.05
        drv_01_m[7]="-mh gyda0-wf.msh -rm LINE -cp PRIMITIVE -f -or "
        drv_01_w[7]=0.04
        drv_01_m[8]="-mh gyda2-ts.msh -rm TMESH -cp FRAME -zb -f -tx flag.mtv -magf LINEAR -minf LINEAR_MIPMAP_LINEAR -vz "
        drv_01_w[8]=0.03
        drv_01_m[9]="-mh gyda0-wf.msh -rm LINE -cp PRIMITIVE -zb -f -c -vz "
        drv_01_w[9]=0.01
        drv_01_m[10]="-mh gyda2-ts.msh -rm TMESH -cp FRAME -zb -f -c -tx flag.mtv -magf LINEAR -minf LINEAR_MIPMAP_LINEAR -vz "
        drv_01_w[10]=0.01

}

# Start Main Loop

	# Parse for the frame rate       
	$2~/frames\/sec/ && $3~/--/		{ 

						# Get test description
						Description=""
						for(i=4;i<=NF;i++) Description=Description$i" "

						# Save the test results by the test description
						string=""
						for(i=1;i<=NumVis;i++) string=string Vis[i]"," 
 
						# Save everything for printing later
						FrameRate[Description]=$1
						DLBuild[Description]=DLB
						Visuals[Description]=string
						Order[++Cnt]=Description
						}

	# Parse for the display list build time
	$2~/sec/ && $3~/\(DL/ && $4~/Build\)/	{ DLB = $1 }

	# Parse for the visual information
	$1~/Visual/ && $2~/ID/			{ Vis[1]  = $3 }
	$1~/Frame/ && $2~/BufferLevel/		{ Vis[2]  = $3 }
	$1~/Double/ && $2~/Buffer/		{ Vis[3]  = $3 }
	$1~/Stereo/               		{ Vis[4]  = $2 }
	$1~/Red/ && $2~/Size/			{ Vis[5]  = $3 }
	$1~/Green/ && $2~/Size/			{ Vis[6]  = $3 }
	$1~/Blue/ && $2~/Size/			{ Vis[7]  = $3 }
	$1~/Alpha/ && $2~/Size/			{ Vis[8]  = $3 }
	$1~/Depth/ && $2~/Size/			{ Vis[9]  = $3 }
	$1~/Stencil/ && $2~/Size/		{ Vis[10] = $3 }
	$2~/Red/ && $1~/Accum/ && $3~/Size/	{ Vis[11] = $4 }
	$2~/Green/ && $1~/Accum/ && $3~/Size/	{ Vis[12] = $4 }
	$2~/Blue/ && $1~/Accum/ && $3~/Size/	{ Vis[13] = $4 }
	$2~/Alpha/ && $1~/Accum/ && $3~/Size/	{ Vis[14] = $4 }

	# Initialze everything 
	$1~/OpenGL/ && $2~/Client/ && $3~/Extensions/	{
						FPS=""
						DLB="NA"
						for(i=1;i<=NumVis;i++) Vis[i]=""
						 }
 
END	{

	if ( PROCESS~/VIEWSETS/ ) {

                #################################
                ## Calculate CDRS-03 Composite ##
                #################################
                CdrsComposite = 1.0
                CdrsHit = 0
                for ( i in cdrs_m )             {
                        if( FrameRate[cdrs_m[i]] > 0 ) {
                                CdrsComposite *= FrameRate[cdrs_m[i]] ^ cdrs_w[i] ; ++CdrsHit
                        }
                }
                if ( CdrsHit != 0 ) {
                        if( PRINT_SUMMARY ~ /TRUE/ )  {
                                printf("\nCDRS-02 Viewset\n")
                                printf("------------------------------------------------------------------------------------------------------------------\n")
                                printf("Test Weight  Frames    DLB   ---------------------------------  Test Description  --------------------------------\n")
                                printf("  #    %%     Per Sec   Sec   \n")
                                printf("------------------------------------------------------------------------------------------------------------------\n")
                                for ( i=1;i<=7;i++) {
                                        printf("%3d   %4.1f %7s %7s   %s\n",i, cdrs_w[i]*100, FrameRate[cdrs_m[i]], DLBuild[cdrs_m[i]],cdrs_m[i])
                                }
                                printf("------------------------------------------------------------------------------------------------------------------\n")

                        }

                        if( PRINT_VISUAL_DATA ~ /TRUE/ )  {
                                printf("\nCDRS-02 Viewset\n")
                                printf("------------------------------------------------------------------------------------------------------------------\n")
                                printf("Test Weight  Frames    DLB  Visual Level  Double Stereo      Frame Buffer     Depth  Stencil   Accumulation Buffer\n")
                                printf("  #    %%     Per Sec   Sec   ID           Buffer Enabled Red Green Blue Alpha Buffer  Buffer  Red Green Blue Alpha\n")
                                printf("------------------------------------------------------------------------------------------------------------------\n")
                                for ( i=1;i<=7;i++) {
                                        split( Visuals[cdrs_m[i]] , f , "," )
                                        f[2]=fbl[f[2]]
                                        printf("%3d   %4.1f %7s %7s",i, cdrs_w[i]*100, FrameRate[cdrs_m[i]], DLBuild[cdrs_m[i]])
                                        for(j=1;j<=NumVis;j++) printf(fmt[j],f[j])
                                        printf("\n")
                                }
                                printf("------------------------------------------------------------------------------------------------------------------\n")
                        }
                        #printf("Frame Buffer Level: N-Normal O-Overlay U-Underlay\n")
                        if ( CdrsHit == 7 ) printf("CDRS-02 Weighted Geometric Mean = %f\n\n ", CdrsComposite )
                        else                printf("CDRS-02 Weighted Geometric Mean = NA (Missing Data)\n\n " )
                }



		###############################
		## Calculate DX-02 Composite ##
		###############################
		DxComposite = 1.0
		DxHit = 0
		for ( i in dx_m ) {
			if( FrameRate[dx_m[i]] > 0 ) {
				DxComposite *= FrameRate[dx_m[i]] ^ dx_w[i] ; DxHit ++
			}
		}
		if ( DxHit != 0 ) {
			if( PRINT_SUMMARY ~ /TRUE/ )  {
				printf("\nDX-02 Viewset\n")
				printf("------------------------------------------------------------------------------------------------------------------\n")
				printf("Test Weight  Frames    DLB   ---------------------------------  Test Description  --------------------------------\n")
				printf("  #    %%     Per Sec   Sec   \n")
				printf("------------------------------------------------------------------------------------------------------------------\n")
				for ( i=1;i<=10;i++) {
					printf("%3d   %4.1f %7s %7s   %s\n",i, dx_w[i]*100, FrameRate[dx_m[i]], DLBuild[dx_m[i]],dx_m[i])
				}	
		 		printf("------------------------------------------------------------------------------------------------------------------\n")

			}

			if( PRINT_VISUAL_DATA ~ /TRUE/ )  {
				printf("\nDX-02 Viewset\n")
				printf("------------------------------------------------------------------------------------------------------------------\n")
				printf("Test Weight  Frames    DLB  Visual Level  Double Stereo      Frame Buffer     Depth  Stencil   Accumulation Buffer\n")
				printf("  #    %%     Per Sec   Sec   ID           Buffer Enabled Red Green Blue Alpha Buffer  Buffer  Red Green Blue Alpha\n")
				printf("------------------------------------------------------------------------------------------------------------------\n")
				for ( i=1;i<=10;i++) {
					split( Visuals[dx_m[i]] , f , "," )
					f[2]=fbl[f[2]]				
					printf("%3d   %4.1f %7s %7s",i, dx_w[i]*100, FrameRate[dx_m[i]], DLBuild[dx_m[i]])
					for(j=1;j<=NumVis;j++) printf(fmt[j],f[j])
					printf("\n")
				}	
		 		printf("------------------------------------------------------------------------------------------------------------------\n")
			}
		 	#printf("Frame Buffer Level: N-Normal O-Overlay U-Underlay\n")
			if ( DxHit == 10 ) printf("DX-02 Weighted Geometric Mean = %f\n\n ", DxComposite )
			else               printf("DX-02 Weighted Geometric Mean = NA (Missing Data)\n\n " )
		}



		################################
		## Calculate DRV-01 Composite ##
		################################
		DrvComposite = 1.0
		DrvHit = 0
		for ( i in drv_01_m ) {
			if( FrameRate[drv_01_m[i]] > 0 ) {
				DrvComposite *= FrameRate[drv_01_m[i]] ^ drv_01_w[i] ; DrvHit ++
			}
		}
		if ( DrvHit != 0 ) {
			if( PRINT_SUMMARY ~ /TRUE/ )  {
				printf("\nDRV-01 Viewset\n")
				printf("------------------------------------------------------------------------------------------------------------------\n")
				printf("Test Weight  Frames    DLB   ---------------------------------  Test Description  --------------------------------\n")
				printf("  #    %%     Per Sec   Sec   \n")
				printf("------------------------------------------------------------------------------------------------------------------\n")
				for ( i=1;i<=10;i++) {
					printf("%3d   %4.1f %7s %7s   %s\n",i, drv_01_w[i]*100, FrameRate[drv_01_m[i]], DLBuild[drv_01_m[i]],drv_01_m[i])
				}	
		 		printf("------------------------------------------------------------------------------------------------------------------\n")

			}

			if( PRINT_VISUAL_DATA ~ /TRUE/ )  {
				printf("\nDRV-01 Viewset\n")
				printf("------------------------------------------------------------------------------------------------------------------\n")
				printf("Test Weight  Frames    DLB  Visual Level  Double Stereo      Frame Buffer     Depth  Stencil   Accumulation Buffer\n")
				printf("  #    %%     Per Sec   Sec   ID           Buffer Enabled Red Green Blue Alpha Buffer  Buffer  Red Green Blue Alpha\n")
				printf("------------------------------------------------------------------------------------------------------------------\n")
				for ( i=1;i<=10;i++) {
					split( Visuals[drv_01_m[i]] , f , "," )
					f[2]=fbl[f[2]]				
					printf("%3d   %4.1f %7s %7s",i, drv_01_w[i]*100, FrameRate[drv_01_m[i]], DLBuild[drv_01_m[i]])
					for(j=1;j<=NumVis;j++) printf(fmt[j],f[j])
					printf("\n")
				}	
		 		printf("------------------------------------------------------------------------------------------------------------------\n")
			}
		 	#printf("Frame Buffer Level: N-Normal O-Overlay U-Underlay\n")
			if ( DrvHit == 10 ) printf("DRV-01 Weighted Geometric Mean = %f\n\n ", DrvComposite )
			else               printf("DRV-01 Weighted Geometric Mean = NA (Missing Data)\n\n " )
		}




	}
                 ##################
                 #  NON_VIEWSETS  #
                 ##################
	else {
		if( PRINT_SUMMARY ~ /TRUE/ )  {
			printf("------------------------------------------------------------------------------------------------------------------\n")
			printf("Test Weight  Frames    DLB   ---------------------------------  Test Description  --------------------------------\n")
			printf("  #    %%     Per Sec   Sec   \n")
			printf("------------------------------------------------------------------------------------------------------------------\n")
			for ( i=1;i<=Cnt;i++) {
				printf("%3d   %3s  %7s %7s   %s\n",i, "NA", FrameRate[Order[i]], DLBuild[Order[i]],Order[i])
			}	
			printf("------------------------------------------------------------------------------------------------------------------\n")
			printf("\n")

		}

		if( PRINT_VISUAL_DATA ~ /TRUE/ )  {
			printf("------------------------------------------------------------------------------------------------------------------\n")
			printf("Test Weight  Frames    DLB  Visual Level  Double Stereo      Frame Buffer     Depth  Stencil   Accumulation Buffer\n")
			printf("  #    %%     Per Sec   Sec   ID           Buffer Enabled Red Green Blue Alpha Buffer  Buffer  Red Green Blue Alpha\n")
			printf("------------------------------------------------------------------------------------------------------------------\n")
			for ( i=1;i<=Cnt;i++) {
				split( Visuals[Order[i]] , f , "," )
				f[2]=fbl[f[2]]				
				printf("%3d   %3s  %7s %7s",i, "NA", FrameRate[Order[i]], DLBuild[Order[i]])
				for(j=1;j<=NumVis;j++) printf(fmt[j],f[j])
				printf("\n")
			}	
			printf("------------------------------------------------------------------------------------------------------------------\n")
			printf("\n")
		}
	}
}
'
