shader: fixes piglit layer-gs-no-write

Fix using undeclared gl_Layer from fragment shader.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
macos/master
Marc-André Lureau 9 years ago committed by Dave Airlie
parent 5f9133d0db
commit 55a34e71e8
  1. 15
      src/vrend_shader.c

@ -116,6 +116,7 @@ struct dump_ctx {
bool uses_lodq; bool uses_lodq;
bool uses_txq_levels; bool uses_txq_levels;
bool uses_tg4; bool uses_tg4;
bool uses_layer;
bool write_all_cbufs; bool write_all_cbufs;
bool uses_stencil_export; bool uses_stencil_export;
uint32_t shadow_samp_mask; uint32_t shadow_samp_mask;
@ -315,6 +316,16 @@ iter_declaration(struct tgsi_iterate_context *iter,
ctx->glsl_ver_required = 150; ctx->glsl_ver_required = 150;
break; break;
} }
case TGSI_SEMANTIC_LAYER:
if (iter->processor.Processor == TGSI_PROCESSOR_FRAGMENT) {
name_prefix = "gl_Layer";
ctx->inputs[i].glsl_predefined_no_emit = true;
ctx->inputs[i].glsl_no_index = true;
ctx->inputs[i].is_int = true;
ctx->inputs[i].override_no_wm = true;
ctx->uses_layer = true;
break;
}
case TGSI_SEMANTIC_PSIZE: case TGSI_SEMANTIC_PSIZE:
if (iter->processor.Processor == TGSI_PROCESSOR_GEOMETRY) { if (iter->processor.Processor == TGSI_PROCESSOR_GEOMETRY) {
name_prefix = "gl_PointSize"; name_prefix = "gl_PointSize";
@ -1436,7 +1447,7 @@ iter_instruction(struct tgsi_iterate_context *iter,
idx += src->Register.SwizzleX; idx += src->Register.SwizzleX;
snprintf(srcs[i], 255, "%s(vec4(%s%s%s[%d]))", stypeprefix, prefix, arrayname, ctx->inputs[j].glsl_name, idx); snprintf(srcs[i], 255, "%s(vec4(%s%s%s[%d]))", stypeprefix, prefix, arrayname, ctx->inputs[j].glsl_name, idx);
} else } else
snprintf(srcs[i], 255, "%s(%s%s%s%s)", stypeprefix, prefix, ctx->inputs[j].glsl_name, arrayname, swizzle); snprintf(srcs[i], 255, "%s(%s%s%s%s)", stypeprefix, prefix, ctx->inputs[j].glsl_name, arrayname, ctx->inputs[j].is_int ? "" : swizzle);
override_no_wm[i] = ctx->inputs[j].override_no_wm; override_no_wm[i] = ctx->inputs[j].override_no_wm;
break; break;
} }
@ -2021,6 +2032,8 @@ static char *emit_header(struct dump_ctx *ctx, char *glsl_hdr)
STRCAT_WITH_RET(glsl_hdr, "#extension GL_ARB_viewport_array : require\n"); STRCAT_WITH_RET(glsl_hdr, "#extension GL_ARB_viewport_array : require\n");
if (ctx->uses_stencil_export) if (ctx->uses_stencil_export)
STRCAT_WITH_RET(glsl_hdr, "#extension GL_ARB_shader_stencil_export : require\n"); STRCAT_WITH_RET(glsl_hdr, "#extension GL_ARB_shader_stencil_export : require\n");
if (ctx->uses_layer)
STRCAT_WITH_RET(glsl_hdr, "#extension GL_ARB_fragment_layer_viewport : require\n");
return glsl_hdr; return glsl_hdr;
} }

Loading…
Cancel
Save