diff options
author | Marc-André Lureau <marcandre.lureau@redhat.com> | 2016-02-22 19:55:11 +0100 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2016-02-29 06:56:37 +0000 |
commit | 914e46b1a8775c686c3fd1ad42fd8ae694f7f5bb (patch) | |
tree | dacb00aefdf968130e955fbc9b5bac99e6db9e32 | |
parent | 55a34e71e892ceafa00479df53c8951c80d589b0 (diff) |
shader: fixes viewport-no-gs.shader_test
Add fragment gl_ViewportIndex support.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
-rw-r--r-- | src/vrend_shader.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/vrend_shader.c b/src/vrend_shader.c index 5afb435..53bb0af 100644 --- a/src/vrend_shader.c +++ b/src/vrend_shader.c @@ -138,6 +138,7 @@ struct dump_ctx { bool has_clipvertex; bool has_clipvertex_so; bool has_viewport_idx; + bool has_frag_viewport_idx; }; static inline const char *tgsi_proc_to_prefix(int shader_type) @@ -316,6 +317,17 @@ iter_declaration(struct tgsi_iterate_context *iter, ctx->glsl_ver_required = 150; break; } + case TGSI_SEMANTIC_VIEWPORT_INDEX: + if (iter->processor.Processor == TGSI_PROCESSOR_FRAGMENT) { + 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; + name_prefix = "gl_ViewportIndex"; + if (ctx->glsl_ver_required >= 140) + ctx->has_frag_viewport_idx = true; + break; + } case TGSI_SEMANTIC_LAYER: if (iter->processor.Processor == TGSI_PROCESSOR_FRAGMENT) { name_prefix = "gl_Layer"; @@ -2030,6 +2042,8 @@ static char *emit_header(struct dump_ctx *ctx, char *glsl_hdr) STRCAT_WITH_RET(glsl_hdr, "#extension GL_ARB_texture_gather : require\n"); if (ctx->has_viewport_idx) STRCAT_WITH_RET(glsl_hdr, "#extension GL_ARB_viewport_array : require\n"); + if (ctx->has_frag_viewport_idx) + STRCAT_WITH_RET(glsl_hdr, "#extension GL_ARB_fragment_layer_viewport : require\n"); if (ctx->uses_stencil_export) STRCAT_WITH_RET(glsl_hdr, "#extension GL_ARB_shader_stencil_export : require\n"); if (ctx->uses_layer) |