diff options
author | marha <marha@users.sourceforge.net> | 2012-04-16 09:37:37 +0200 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2012-04-16 09:43:48 +0200 |
commit | 00eae6f01bf11ec6a90dfc68e607b6a1a250a118 (patch) | |
tree | b814d518076840b7433d02bc3b5957c1dd54de25 /mesalib/src/glsl/linker.cpp | |
parent | a50d2ee664302147942dd5ed6428f9bab9d4e76a (diff) | |
parent | d6d3999ccb2cb72d55820770260172eccbbb68d7 (diff) | |
download | vcxsrv-00eae6f01bf11ec6a90dfc68e607b6a1a250a118.tar.gz vcxsrv-00eae6f01bf11ec6a90dfc68e607b6a1a250a118.tar.bz2 vcxsrv-00eae6f01bf11ec6a90dfc68e607b6a1a250a118.zip |
Merge remote-tracking branch 'origin/released'
Conflicts:
xorg-server/Xext/securitysrv.h
xorg-server/glx/glxext.h
xorg-server/glx/indirect_reqsize.c
xorg-server/glx/indirect_size_get.c
xorg-server/hw/xwin/winclip.c
xorg-server/hw/xwin/winfont.c
xorg-server/hw/xwin/winglobals.c
xorg-server/hw/xwin/winglobals.h
xorg-server/hw/xwin/winmonitors.h
xorg-server/include/closestr.h
xorg-server/include/pixmapstr.h
xorg-server/include/servermd.h
xorg-server/include/site.h
xorg-server/include/windowstr.h
xorg-server/include/xkbstr.h
Diffstat (limited to 'mesalib/src/glsl/linker.cpp')
-rw-r--r-- | mesalib/src/glsl/linker.cpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/mesalib/src/glsl/linker.cpp b/mesalib/src/glsl/linker.cpp index 49b6b8f4a..6ba297237 100644 --- a/mesalib/src/glsl/linker.cpp +++ b/mesalib/src/glsl/linker.cpp @@ -1274,10 +1274,15 @@ assign_attribute_or_color_locations(gl_shader_program *prog, } } else if (target_index == MESA_SHADER_FRAGMENT) { unsigned binding; + unsigned index; if (prog->FragDataBindings->get(binding, var->name)) { assert(binding >= FRAG_RESULT_DATA0); var->location = binding; + + if (prog->FragDataIndexBindings->get(index, var->name)) { + var->index = index; + } } } @@ -1288,7 +1293,7 @@ assign_attribute_or_color_locations(gl_shader_program *prog, */ const unsigned slots = count_attribute_slots(var->type); if (var->location != -1) { - if (var->location >= generic_base) { + if (var->location >= generic_base && var->index < 1) { /* From page 61 of the OpenGL 4.0 spec: * * "LinkProgram will fail if the attribute bindings assigned @@ -1333,8 +1338,8 @@ assign_attribute_or_color_locations(gl_shader_program *prog, ? "vertex shader input" : "fragment shader output"; linker_error(prog, "insufficient contiguous locations " - "available for %s `%s'", string, - var->name); + "available for %s `%s' %d %d %d", string, + var->name, used_locations, use_mask, attr); return false; } @@ -2321,7 +2326,7 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog) goto done; } - if (!assign_attribute_or_color_locations(prog, MESA_SHADER_FRAGMENT, ctx->Const.MaxDrawBuffers)) { + if (!assign_attribute_or_color_locations(prog, MESA_SHADER_FRAGMENT, MAX2(ctx->Const.MaxDrawBuffers, ctx->Const.MaxDualSourceDrawBuffers))) { goto done; } |