diff --git a/src/vrend_shader.c b/src/vrend_shader.c index a2dd41f..d52a3b9 100644 --- a/src/vrend_shader.c +++ b/src/vrend_shader.c @@ -3870,6 +3870,16 @@ static void get_source_info_patch(enum vrend_type_qualifier srcstypeprefix, } +static void get_tesslevel_as_source(struct vrend_strbuf *src_buf, const char *prefix, + const char *name, const struct tgsi_src_register *reg) +{ + strbuf_fmt(src_buf, "%s(vec4(%s[%d], %s[%d], %s[%d], %s[%d]))", + prefix, + name, reg->SwizzleX, + name, reg->SwizzleY, + name, reg->SwizzleZ, + name, reg->SwizzleW); +} // TODO Consider exposing non-const ctx-> members as args to make *ctx const static bool @@ -3988,6 +3998,9 @@ get_source_info(struct dump_ctx *ctx, load_clipdist_fs(ctx, src_buf, src, j, false, get_string(stypeprefix), ctx->inputs[j].first); else create_swizzled_clipdist(ctx, src_buf, src, j, false, get_string(stypeprefix), prefix, arrayname, ctx->inputs[j].first); + } else if (ctx->inputs[j].name == TGSI_SEMANTIC_TESSOUTER || + ctx->inputs[j].name == TGSI_SEMANTIC_TESSINNER) { + get_tesslevel_as_source(src_buf, prefix, ctx->inputs[j].glsl_name, &src->Register); } else { enum vrend_type_qualifier srcstypeprefix = stypeprefix; if ((stype == TGSI_TYPE_UNSIGNED || stype == TGSI_TYPE_SIGNED) && @@ -4056,6 +4069,9 @@ get_source_info(struct dump_ctx *ctx, } else if (ctx->outputs[j].name == TGSI_SEMANTIC_PATCH) { struct vrend_shader_io *io = ctx->patch_ios.output_range.used ? &ctx->patch_ios.output_range.io : &ctx->outputs[j]; get_source_info_patch(srcstypeprefix, prefix, src, io, arrayname, swizzle, src_buf); + } else if (ctx->outputs[j].name == TGSI_SEMANTIC_TESSOUTER || + ctx->outputs[j].name == TGSI_SEMANTIC_TESSINNER) { + get_tesslevel_as_source(src_buf, prefix, ctx->outputs[j].glsl_name, &src->Register); } else { strbuf_fmt(src_buf, "%s(%s%s%s%s)", get_string(srcstypeprefix), prefix, ctx->outputs[j].glsl_name, arrayname, ctx->outputs[j].is_int ? "" : swizzle); }