Fix shader crashing when declaring matrix or array varyings

This commit is contained in:
Yuri Roubinsky 2022-01-14 10:10:42 +03:00
parent e4453096d3
commit 0845b25497

View file

@ -692,17 +692,36 @@ String ShaderCompiler::_dump_node_code(const SL::Node *p_node, int p_level, Gene
vcode += _prestr(varying.precision, ShaderLanguage::is_float_type(varying.type)); vcode += _prestr(varying.precision, ShaderLanguage::is_float_type(varying.type));
vcode += _typestr(varying.type); vcode += _typestr(varying.type);
vcode += " " + _mkid(varying_name); vcode += " " + _mkid(varying_name);
uint32_t inc = 1U;
if (varying.array_size > 0) { if (varying.array_size > 0) {
inc = (uint32_t)varying.array_size;
vcode += "["; vcode += "[";
vcode += itos(varying.array_size); vcode += itos(varying.array_size);
vcode += "]"; vcode += "]";
} }
switch (varying.type) {
case SL::TYPE_MAT2:
inc *= 2U;
break;
case SL::TYPE_MAT3:
inc *= 3U;
break;
case SL::TYPE_MAT4:
inc *= 4U;
break;
default:
break;
}
vcode += ";\n"; vcode += ";\n";
r_gen_code.stage_globals[STAGE_VERTEX] += "layout(location=" + itos(index) + ") " + interp_mode + "out " + vcode; r_gen_code.stage_globals[STAGE_VERTEX] += "layout(location=" + itos(index) + ") " + interp_mode + "out " + vcode;
r_gen_code.stage_globals[STAGE_FRAGMENT] += "layout(location=" + itos(index) + ") " + interp_mode + "in " + vcode; r_gen_code.stage_globals[STAGE_FRAGMENT] += "layout(location=" + itos(index) + ") " + interp_mode + "in " + vcode;
index++; index += inc;
} }
if (var_frag_to_light.size() > 0) { if (var_frag_to_light.size() > 0) {