On 6 June 2018 at 00:32, Matteo Bruni mbruni@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.