mesa: set the gl_FragDepth layout in the GLSL linker

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
Marek Olšák
2011-11-18 15:00:10 +01:00
parent 90be99427a
commit ec174a4244
4 changed files with 61 additions and 46 deletions

View File

@@ -685,29 +685,6 @@ ir_to_mesa_visitor::visit(ir_variable *ir)
fp->OriginUpperLeft = ir->origin_upper_left;
fp->PixelCenterInteger = ir->pixel_center_integer;
} else if (strcmp(ir->name, "gl_FragDepth") == 0) {
struct gl_fragment_program *fp = (struct gl_fragment_program *)this->prog;
switch (ir->depth_layout) {
case ir_depth_layout_none:
fp->FragDepthLayout = FRAG_DEPTH_LAYOUT_NONE;
break;
case ir_depth_layout_any:
fp->FragDepthLayout = FRAG_DEPTH_LAYOUT_ANY;
break;
case ir_depth_layout_greater:
fp->FragDepthLayout = FRAG_DEPTH_LAYOUT_GREATER;
break;
case ir_depth_layout_less:
fp->FragDepthLayout = FRAG_DEPTH_LAYOUT_LESS;
break;
case ir_depth_layout_unchanged:
fp->FragDepthLayout = FRAG_DEPTH_LAYOUT_UNCHANGED;
break;
default:
assert(0);
break;
}
}
if (ir->mode == ir_var_uniform && strncmp(ir->name, "gl_", 3) == 0) {
@@ -3222,6 +3199,12 @@ get_mesa_program(struct gl_context *ctx,
do_set_program_inouts(shader->ir, prog, shader->Type == GL_FRAGMENT_SHADER);
count_resources(prog);
/* Set the gl_FragDepth layout. */
if (target == GL_FRAGMENT_PROGRAM_ARB) {
struct gl_fragment_program *fp = (struct gl_fragment_program *)prog;
fp->FragDepthLayout = shader_program->FragDepthLayout;
}
_mesa_reference_program(ctx, &shader->Program, prog);
if ((ctx->Shader.Flags & GLSL_NO_OPT) == 0) {