On 6 June 2018 at 00:32, Matteo Bruni <mbruni(a)codeweavers.com> wrote:
+static void shader_glsl_generate_color_output(struct wined3d_string_buffer *buffer, + const struct wined3d_gl_info *gl_info, const struct wined3d_shader *shader) +{ + const struct wined3d_shader_signature *output_signature = &shader->output_signature; + unsigned int i; + + if (output_signature->element_count) + { + for (i = 0; i < output_signature->element_count; ++i) + { + const struct wined3d_shader_signature_element *output = &output_signature->elements[i]; + + if (strncasecmp(output->semantic_name, "SV_Target", sizeof("SV_Target"))) + continue; Should this really match against the "semantic_name" string, or does the "sysval_semantic" field also contain that information?
+ switch (output->component_type) + { + case WINED3D_TYPE_UINT: + shader_addline(buffer, "color_out%u = floatBitsToUint(ps_out[%u]);\n", + output->semantic_idx, output->semantic_idx); + break; + case WINED3D_TYPE_INT: + shader_addline(buffer, "color_out%u = floatBitsToInt(ps_out[%u]);\n", + output->semantic_idx, output->semantic_idx); + break; + + default: + FIXME("Unhandled type %#x.\n", output->component_type); + /* Fall through. */ + case WINED3D_TYPE_UNKNOWN: + case WINED3D_TYPE_FLOAT: + shader_addline(buffer, "color_out%u = ps_out[%u];\n", + output->semantic_idx, output->semantic_idx); + } I think shader_glsl_sprintf_cast() with appropriate arguments could also handle this.