diff options
author | Dave Airlie <airliedfreedesktop.org> | 2004-12-19 03:06:59 +0000 |
---|---|---|
committer | Dave Airlie <airliedfreedesktop.org> | 2004-12-19 03:06:59 +0000 |
commit | 7f752fed993e5e9423abac200dd59141edbada56 (patch) | |
tree | 06eba28f01c81dfbd8c4a9104206765f8731528c /src/mesa/main/context.c | |
parent | a803b0c891404dcd7c376e91f6a033cd4e42abc3 (diff) |
Implement software ATI_fragment_shader
no error detection, slow, may not be 100% correct but a good start
Diffstat (limited to 'src/mesa/main/context.c')
-rw-r--r-- | src/mesa/main/context.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c index 3116cb95a1f..98e684d3936 100644 --- a/src/mesa/main/context.c +++ b/src/mesa/main/context.c @@ -859,6 +859,11 @@ alloc_shared_state( GLcontext *ctx ) if (!ss->DefaultFragmentProgram) goto cleanup; #endif +#if FEATURE_ATI_fragment_shader + ss->DefaultFragmentShader = ctx->Driver.NewProgram(ctx, GL_FRAGMENT_SHADER_ATI, 0); + if (!ss->DefaultFragmentShader) + goto cleanup; +#endif ss->BufferObjects = _mesa_NewHashTable(); @@ -909,6 +914,10 @@ alloc_shared_state( GLcontext *ctx ) if (ss->DefaultFragmentProgram) ctx->Driver.DeleteProgram(ctx, ss->DefaultFragmentProgram); #endif +#if FEATURE_ATI_fragment_shader + if (ss->DefaultFragmentShader) + ctx->Driver.DeleteProgram(ctx, ss->DefaultFragmentShader); +#endif #if FEATURE_ARB_vertex_buffer_object if (ss->BufferObjects) _mesa_DeleteHashTable(ss->BufferObjects); @@ -1003,6 +1012,9 @@ free_shared_state( GLcontext *ctx, struct gl_shared_state *ss ) #if FEATURE_ARB_fragment_program _mesa_delete_program(ctx, ss->DefaultFragmentProgram); #endif +#if FEATURE_ATI_fragment_shader + _mesa_delete_program(ctx, ss->DefaultFragmentShader); +#endif #if FEATURE_ARB_vertex_buffer_object _mesa_DeleteHashTable(ss->BufferObjects); @@ -1100,6 +1112,7 @@ _mesa_init_constants( GLcontext *ctx ) ctx->Const.MaxFragmentProgramTexInstructions = MAX_FRAGMENT_PROGRAM_TEX_INSTRUCTIONS; ctx->Const.MaxFragmentProgramTexIndirections = MAX_FRAGMENT_PROGRAM_TEX_INDIRECTIONS; #endif + ctx->Const.MaxProgramMatrices = MAX_PROGRAM_MATRICES; ctx->Const.MaxProgramMatrixStackDepth = MAX_PROGRAM_MATRIX_STACK_DEPTH; @@ -1385,6 +1398,22 @@ add_newer_entrypoints(void) { "glActiveStencilFaceEXT", _gloffset_ActiveStencilFaceEXT }, /* GL_ARB_draw_buffers */ { "glDrawBuffersARB", _gloffset_DrawBuffersARB }, +#if FEATURE_ATI_fragment_shader + { "glGenFragmentShadersATI", _gloffset_GenFragmentShadersATI }, + { "glBindFragmentShaderATI", _gloffset_BindFragmentShaderATI }, + { "glDeleteFragmentShaderATI", _gloffset_DeleteFragmentShaderATI }, + { "glBeginFragmentShaderATI", _gloffset_BeginFragmentShaderATI }, + { "glEndFragmentShaderATI", _gloffset_EndFragmentShaderATI }, + { "glPassTexCoordATI", _gloffset_PassTexCoordATI }, + { "glSampleMapATI", _gloffset_SampleMapATI }, + { "glColorFragmentOp1ATI", _gloffset_ColorFragmentOp1ATI }, + { "glColorFragmentOp2ATI", _gloffset_ColorFragmentOp2ATI }, + { "glColorFragmentOp3ATI", _gloffset_ColorFragmentOp3ATI }, + { "glAlphaFragmentOp1ATI", _gloffset_AlphaFragmentOp1ATI }, + { "glAlphaFragmentOp2ATI", _gloffset_AlphaFragmentOp2ATI }, + { "glAlphaFragmentOp3ATI", _gloffset_AlphaFragmentOp3ATI }, + { "glSetFragmentShaderConstantATI", _gloffset_SetFragmentShaderConstantATI }, +#endif }; for (i = 0; i < Elements(newer_entrypoints); i++ ) { |