From fb2fda669da6d02d35737bbdcd8d17144a739758 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Fri, 2 May 2008 07:04:43 -0400 Subject: [PATCH] GLSL profile now emits correct array deference on instructions. Need to coerce the uniforms into real arrays, still, though. :/ --HG-- branch : trunk --- mojoshader.c | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/mojoshader.c b/mojoshader.c index 58bead89..1d4e94f3 100644 --- a/mojoshader.c +++ b/mojoshader.c @@ -1826,6 +1826,30 @@ static char *make_GLSL_srcarg_string(Context *ctx, const int idx, return ""; } // if + const char *rel_lbracket = ""; + const char *rel_rbracket = ""; + char rel_swizzle[4] = { '\0' }; + char rel_regnum_str[16] = { '\0' }; + const char *rel_regtype_str = ""; + if (arg->relative) + { + rel_swizzle[0] = '.'; + rel_swizzle[1] = swizzle_channels[arg->relative_component]; + rel_swizzle[2] = '\0'; + rel_lbracket = "["; + rel_rbracket = "]"; + rel_regtype_str = get_GLSL_register_string(ctx, arg->relative_regtype, + arg->relative_regnum, + rel_regnum_str, + sizeof (rel_regnum_str)); + + if (regtype_str == NULL) + { + fail(ctx, "Unknown relative source register type."); + return ""; + } // if + } // if + char swiz_str[6]; int i = 0; // 0xE4 == 11100100 ... 3 2 1 0. No swizzle. @@ -1842,8 +1866,10 @@ static char *make_GLSL_srcarg_string(Context *ctx, const int idx, const char *shader_type_str = get_shader_type_string(ctx); char *retval = get_scratch_buffer(ctx); - snprintf(retval, SCRATCH_BUFFER_SIZE, "%s%s_%s%s%s%s", premod_str, - shader_type_str, regtype_str, regnum_str, swiz_str, postmod_str); + snprintf(retval, SCRATCH_BUFFER_SIZE, "%s%s_%s%s%s%s%s%s%s%s%s", + premod_str, shader_type_str, regtype_str, regnum_str, + rel_lbracket, rel_regtype_str, rel_regnum_str, rel_swizzle, + rel_rbracket, swiz_str, postmod_str); // !!! FIXME: make sure the scratch buffer was large enough. return retval; } // make_GLSL_srcarg_string