summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc-André Lureau <marcandre.lureau@redhat.com>2016-02-22 19:55:11 +0100
committerDave Airlie <airlied@redhat.com>2016-02-29 06:56:37 +0000
commit914e46b1a8775c686c3fd1ad42fd8ae694f7f5bb (patch)
treedacb00aefdf968130e955fbc9b5bac99e6db9e32
parent55a34e71e892ceafa00479df53c8951c80d589b0 (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.c14
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)