X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fdrivers%2Fdri%2Fi965%2Fbrw_program.c;h=3e52be5d4b74cb9cbeba12fac06fe5609dafe681;hb=0534e958c9d7fc854b64ad38964863e895e5a317;hp=b6cf6c000eb87d6e2a1c400e8f84fc58aeae8156;hpb=a1bebf73dfdaf2cd23286aa74271b87166589901;p=mesa.git diff --git a/src/mesa/drivers/dri/i965/brw_program.c b/src/mesa/drivers/dri/i965/brw_program.c index b6cf6c000eb..3e52be5d4b7 100644 --- a/src/mesa/drivers/dri/i965/brw_program.c +++ b/src/mesa/drivers/dri/i965/brw_program.c @@ -132,6 +132,7 @@ static GLboolean brwProgramStringNotify( GLcontext *ctx, struct brw_fragment_program *newFP = brw_fragment_program(fprog); const struct brw_fragment_program *curFP = brw_fragment_program_const(brw->fragment_program); + struct gl_shader_program *shader_program; if (fprog->FogOption) { _mesa_append_fog_code(ctx, fprog); @@ -142,6 +143,21 @@ static GLboolean brwProgramStringNotify( GLcontext *ctx, brw->state.dirty.brw |= BRW_NEW_FRAGMENT_PROGRAM; newFP->id = brw->program_id++; newFP->isGLSL = brw_wm_is_glsl(fprog); + + /* Don't reject fragment shaders for their Mesa IR state when we're + * using the new FS backend. + */ + shader_program = _mesa_lookup_shader_program(ctx, prog->Id); + if (shader_program) { + for (i = 0; i < shader_program->_NumLinkedShaders; i++) { + struct brw_shader *shader; + + shader = (struct brw_shader *)shader_program->_LinkedShaders[i]; + if (shader->base.Type == GL_FRAGMENT_SHADER && shader->ir) { + return GL_TRUE; + } + } + } } else if (target == GL_VERTEX_PROGRAM_ARB) { struct gl_vertex_program *vprog = (struct gl_vertex_program *) prog; @@ -232,6 +248,8 @@ void brwInitFragProgFuncs( struct dd_function_table *functions ) functions->IsProgramNative = brwIsProgramNative; functions->ProgramStringNotify = brwProgramStringNotify; + functions->NewShader = brw_new_shader; + functions->NewShaderProgram = brw_new_shader_program; functions->CompileShader = brw_compile_shader; functions->LinkShader = brw_link_shader; }