From: Nicolai Hähnle <nicolai.haeh...@amd.com> --- src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp index 0913dbb..f2663bc 100644 --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp @@ -341,20 +341,21 @@ static st_dst_reg undef_dst = st_dst_reg(PROGRAM_UNDEFINED, SWIZZLE_NOOP, GLSL_T struct array_decl { unsigned mesa_index; unsigned array_id; unsigned array_size; enum glsl_base_type array_type; }; struct temp_array_decl { unsigned size; + unsigned usagemask; }; static enum glsl_base_type find_array_type(struct array_decl *arrays, unsigned count, unsigned array_id) { unsigned i; for (i = 0; i < count; i++) { struct array_decl *decl = &arrays[i]; @@ -1221,20 +1222,21 @@ glsl_to_tgsi_visitor::get_temp(const glsl_type *type) if (!options->EmitNoIndirectTemp && type_has_array_or_matrix(type)) { if (num_temp_arrays >= max_num_temp_arrays) { max_num_temp_arrays += 32; temp_arrays = (temp_array_decl*) realloc(temp_arrays, sizeof(temp_arrays[0]) * max_num_temp_arrays); } src.file = PROGRAM_ARRAY; src.index = num_temp_arrays << 16 | 0x8000; temp_arrays[num_temp_arrays].size = type_size(type); + temp_arrays[num_temp_arrays].usagemask = st_glsl_type_usagemask(type); ++num_temp_arrays; } else { src.file = PROGRAM_TEMPORARY; src.index = next_temp; next_temp += type_size(type); } if (type->is_array() || type->is_record()) { src.swizzle = SWIZZLE_NOOP; @@ -6037,21 +6039,22 @@ st_translate_program( /* * Declare temporary arrays. */ t->num_temp_arrays = program->num_temp_arrays; if (t->num_temp_arrays) { t->temp_arrays = (struct ureg_dst*) calloc(1, sizeof(t->temp_arrays[0]) * t->num_temp_arrays); for (i = 0; i < t->num_temp_arrays; ++i) t->temp_arrays[i] = ureg_DECL_array_temporary( - t->ureg, program->temp_arrays[i].size, TGSI_WRITEMASK_XYZW, TRUE); + t->ureg, program->temp_arrays[i].size, + program->temp_arrays[i].usagemask, TRUE); } /* * Declare input attributes. */ switch (procType) { case PIPE_SHADER_FRAGMENT: for (i = 0; i < numInputs; i++) { unsigned array_id = 0; unsigned array_size; -- 2.7.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev