Major commit for preparing 1.1.1 release
[spandex:spandex.git] / sct / common / modules / opengles2 / sct_opengles2releaseshadercompileraction.c
1 /*
2  * Spandex benchmark and test framework.
3  *
4  * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
5  *
6  * Contact: Kari J. Kangas <kari.j.kangas@nokia.com>
7  *
8  *   This framework is free software; you can redistribute it and/or modify it
9  * under the terms of the GNU Lesser General Public License as published by the
10  * Free Software Foundation, version 2.1 of the License.
11  *
12  *   This framework is distributed in the hope that it will be useful, but
13  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
15  * for more details.
16  *
17  *   You should have received a copy of the GNU Lesser General Public License
18  * along with this framework; if not, see <http://www.gnu.org/licenses/>.
19  *
20  */
21
22 #include "sct_opengles2releaseshadercompileraction.h"
23 #include "sct_sicommon.h"
24 #include "sct_utils.h"
25 #include "sct_gl2.h"
26
27 #include <stdio.h>
28 #include <string.h>
29
30 /*!
31  *
32  *
33  */
34 void* sctiCreateOpenGLES2ReleaseShaderCompilerActionContext( void* moduleContext, SCTAttributeList* attributes )
35 {
36     SCTOpenGLES2ReleaseShaderCompilerActionContext* context;
37
38     SCT_ASSERT_ALWAYS( moduleContext != NULL );
39     SCT_ASSERT_ALWAYS( attributes != NULL );
40
41     context = ( SCTOpenGLES2ReleaseShaderCompilerActionContext* )( siCommonMemoryAlloc( NULL, sizeof( SCTOpenGLES2ReleaseShaderCompilerActionContext ) ) );
42     if( context == NULL )
43     {
44         SCT_LOG_ERROR( "Allocation failed in ReleaseShaderCompiler@OpenGLES2 action context creation." );
45         return NULL;
46     }
47     memset( context, 0, sizeof( SCTOpenGLES2ReleaseShaderCompilerActionContext ) );
48
49     if( sctiParseOpenGLES2ReleaseShaderCompilerActionAttributes( &( context->data ), attributes ) == SCT_FALSE )
50     {
51         sctiDestroyOpenGLES2ReleaseShaderCompilerActionContext( context );
52         return NULL;
53     }
54
55     return context;
56 }
57
58 /*!
59  *
60  *
61  */
62 void sctiDestroyOpenGLES2ReleaseShaderCompilerActionContext( void* context )
63 {
64     if( context == NULL )
65     {
66         return;
67     }
68    
69     siCommonMemoryFree( NULL, context );
70 }
71
72 /*!
73  *
74  *
75  */
76 SCTBoolean sctiOpenGLES2ReleaseShaderCompilerActionExecute( SCTAction* action, int frameNumber )
77 {
78     GLenum  err;
79
80     SCT_ASSERT( action != NULL );
81     SCT_ASSERT( action->context != NULL );
82     SCT_USE_VARIABLE( action );
83     SCT_USE_VARIABLE( frameNumber );
84
85     glReleaseShaderCompiler();
86
87 #if defined( SCT_OPENGLES2_MODULE_CHECK_ERRORS )
88     /* Check for errors. */
89     err = glGetError();
90     if( err != GL_NO_ERROR )
91     {
92         char buf[ 256 ];
93         sprintf( buf, "GL error %s in ReleaseShaderCompiler@OpenGLES2 action execute.", sctiOpenGLES2GetErrorString( err ) );
94         SCT_LOG_ERROR( buf );
95         sctiOpenGLES2ClearGLError();
96
97         return SCT_FALSE;
98     }
99 #else   /* SCT_OPENGLES2_MODULE_CHECK_ERRORS */
100     SCT_USE_VARIABLE( err );
101 #endif  /* SCT_OPENGLES2_MODULE_CHECK_ERRORS */
102
103     return SCT_TRUE;
104 }
105
106 /*!
107  *
108  *
109  */
110 void sctiOpenGLES2ReleaseShaderCompilerActionDestroy( SCTAction* action )
111 {
112     SCTOpenGLES2ReleaseShaderCompilerActionContext* context;
113
114     SCT_ASSERT_ALWAYS( action != NULL );
115
116     context = ( SCTOpenGLES2ReleaseShaderCompilerActionContext* )( action->context );
117
118     action->context = NULL;
119     sctiDestroyOpenGLES2ReleaseShaderCompilerActionContext( context );
120 }