wined3d: Use string_buffer_sprintf() in handle_ps3_input().
This commit is contained in:
parent
287093e26e
commit
12e59c5278
|
@ -4766,19 +4766,20 @@ static void delete_glsl_program_entry(struct shader_glsl_priv *priv, const struc
|
||||||
HeapFree(GetProcessHeap(), 0, entry);
|
HeapFree(GetProcessHeap(), 0, entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_ps3_input(struct wined3d_string_buffer *buffer,
|
static void handle_ps3_input(struct shader_glsl_priv *priv,
|
||||||
const struct wined3d_gl_info *gl_info, const DWORD *map,
|
const struct wined3d_gl_info *gl_info, const DWORD *map,
|
||||||
const struct wined3d_shader_signature *input_signature,
|
const struct wined3d_shader_signature *input_signature,
|
||||||
const struct wined3d_shader_reg_maps *reg_maps_in,
|
const struct wined3d_shader_reg_maps *reg_maps_in,
|
||||||
const struct wined3d_shader_signature *output_signature,
|
const struct wined3d_shader_signature *output_signature,
|
||||||
const struct wined3d_shader_reg_maps *reg_maps_out)
|
const struct wined3d_shader_reg_maps *reg_maps_out)
|
||||||
{
|
{
|
||||||
|
struct wined3d_string_buffer *buffer = &priv->shader_buffer;
|
||||||
unsigned int i, j;
|
unsigned int i, j;
|
||||||
DWORD *set;
|
DWORD *set;
|
||||||
DWORD in_idx;
|
DWORD in_idx;
|
||||||
unsigned int in_count = vec4_varyings(3, gl_info);
|
unsigned int in_count = vec4_varyings(3, gl_info);
|
||||||
char reg_mask[6];
|
char reg_mask[6];
|
||||||
char destination[50];
|
struct wined3d_string_buffer *destination = string_buffer_get(&priv->string_buffers);
|
||||||
|
|
||||||
set = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*set) * (in_count + 2));
|
set = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*set) * (in_count + 2));
|
||||||
|
|
||||||
|
@ -4800,11 +4801,11 @@ static void handle_ps3_input(struct wined3d_string_buffer *buffer,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (in_idx == in_count)
|
if (in_idx == in_count)
|
||||||
sprintf(destination, "gl_FrontColor");
|
string_buffer_sprintf(destination, "gl_FrontColor");
|
||||||
else if (in_idx == in_count + 1)
|
else if (in_idx == in_count + 1)
|
||||||
sprintf(destination, "gl_FrontSecondaryColor");
|
string_buffer_sprintf(destination, "gl_FrontSecondaryColor");
|
||||||
else
|
else
|
||||||
sprintf(destination, "ps_link[%u]", in_idx);
|
string_buffer_sprintf(destination, "ps_link[%u]", in_idx);
|
||||||
|
|
||||||
if (!set[in_idx])
|
if (!set[in_idx])
|
||||||
set[in_idx] = ~0u;
|
set[in_idx] = ~0u;
|
||||||
|
@ -4827,7 +4828,7 @@ static void handle_ps3_input(struct wined3d_string_buffer *buffer,
|
||||||
shader_glsl_write_mask_to_str(mask, reg_mask);
|
shader_glsl_write_mask_to_str(mask, reg_mask);
|
||||||
|
|
||||||
shader_addline(buffer, "%s%s = vs_out[%u]%s;\n",
|
shader_addline(buffer, "%s%s = vs_out[%u]%s;\n",
|
||||||
destination, reg_mask, output->register_idx, reg_mask);
|
destination->buffer, reg_mask, output->register_idx, reg_mask);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4848,24 +4849,26 @@ static void handle_ps3_input(struct wined3d_string_buffer *buffer,
|
||||||
reg_mask[size] = '\0';
|
reg_mask[size] = '\0';
|
||||||
|
|
||||||
if (i == in_count)
|
if (i == in_count)
|
||||||
sprintf(destination, "gl_FrontColor");
|
string_buffer_sprintf(destination, "gl_FrontColor");
|
||||||
else if (i == in_count + 1)
|
else if (i == in_count + 1)
|
||||||
sprintf(destination, "gl_FrontSecondaryColor");
|
string_buffer_sprintf(destination, "gl_FrontSecondaryColor");
|
||||||
else
|
else
|
||||||
sprintf(destination, "ps_link[%u]", i);
|
string_buffer_sprintf(destination, "ps_link[%u]", i);
|
||||||
|
|
||||||
if (size == 1) shader_addline(buffer, "%s.%s = 0.0;\n", destination, reg_mask);
|
if (size == 1) shader_addline(buffer, "%s.%s = 0.0;\n", destination->buffer, reg_mask);
|
||||||
else shader_addline(buffer, "%s.%s = vec%u(0.0);\n", destination, reg_mask, size);
|
else shader_addline(buffer, "%s.%s = vec%u(0.0);\n", destination->buffer, reg_mask, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
HeapFree(GetProcessHeap(), 0, set);
|
HeapFree(GetProcessHeap(), 0, set);
|
||||||
|
string_buffer_release(&priv->string_buffers, destination);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Context activation is done by the caller. */
|
/* Context activation is done by the caller. */
|
||||||
static GLuint generate_param_reorder_function(struct wined3d_string_buffer *buffer,
|
static GLuint generate_param_reorder_function(struct shader_glsl_priv *priv,
|
||||||
const struct wined3d_shader *vs, const struct wined3d_shader *ps,
|
const struct wined3d_shader *vs, const struct wined3d_shader *ps,
|
||||||
const struct wined3d_gl_info *gl_info)
|
const struct wined3d_gl_info *gl_info)
|
||||||
{
|
{
|
||||||
|
struct wined3d_string_buffer *buffer = &priv->shader_buffer;
|
||||||
GLuint ret = 0;
|
GLuint ret = 0;
|
||||||
DWORD ps_major = ps ? ps->reg_maps.shader_version.major : 0;
|
DWORD ps_major = ps ? ps->reg_maps.shader_version.major : 0;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
@ -4964,7 +4967,7 @@ static GLuint generate_param_reorder_function(struct wined3d_string_buffer *buff
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Then, fix the pixel shader input */
|
/* Then, fix the pixel shader input */
|
||||||
handle_ps3_input(buffer, gl_info, ps->u.ps.input_reg_map, &ps->input_signature,
|
handle_ps3_input(priv, gl_info, ps->u.ps.input_reg_map, &ps->input_signature,
|
||||||
&ps->reg_maps, &vs->output_signature, &vs->reg_maps);
|
&ps->reg_maps, &vs->output_signature, &vs->reg_maps);
|
||||||
|
|
||||||
shader_addline(buffer, "}\n");
|
shader_addline(buffer, "}\n");
|
||||||
|
@ -6578,7 +6581,7 @@ static void set_glsl_shader_program(const struct wined3d_context *context, const
|
||||||
WORD map = vshader->reg_maps.input_registers;
|
WORD map = vshader->reg_maps.input_registers;
|
||||||
struct wined3d_string_buffer *tmp_name = string_buffer_get(&priv->string_buffers);
|
struct wined3d_string_buffer *tmp_name = string_buffer_get(&priv->string_buffers);
|
||||||
|
|
||||||
reorder_shader_id = generate_param_reorder_function(&priv->shader_buffer, vshader, pshader, gl_info);
|
reorder_shader_id = generate_param_reorder_function(priv, vshader, pshader, gl_info);
|
||||||
TRACE("Attaching GLSL shader object %u to program %u.\n", reorder_shader_id, program_id);
|
TRACE("Attaching GLSL shader object %u to program %u.\n", reorder_shader_id, program_id);
|
||||||
GL_EXTCALL(glAttachShader(program_id, reorder_shader_id));
|
GL_EXTCALL(glAttachShader(program_id, reorder_shader_id));
|
||||||
checkGLcall("glAttachShader");
|
checkGLcall("glAttachShader");
|
||||||
|
|
Loading…
Reference in New Issue