You've already forked wine-staging
mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-09-12 18:50:20 -07:00
Remove some patches:
* ntdll-call_thread_func_wrapper: Remove patchset accommodating broken custom program. * wined3d-Interpolation_Modifiers: Remove patch 0002, fixed by f75f581aa2b8f0c494a3c2c5b1cc1d9526c778c1. Probably more should be removed. * winex11-Window_Groups: Remove, fixed by 917e86dd7a4cca1da47262caaded2bef9e022f99. * winhlp32-Flex_Workaround: Remove, fixed upstream in flex 2.6.4.
This commit is contained in:
@@ -1,203 +0,0 @@
|
||||
From f851b588d460fd11fcf0e2abde1051b4029457f2 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?J=C3=B3zef=20Kucia?= <jkucia@codeweavers.com>
|
||||
Date: Fri, 8 Sep 2017 01:03:52 +0200
|
||||
Subject: wined3d: Unroll vertex / geometry shader outputs and pixel shader
|
||||
inputs for >= sm4.
|
||||
|
||||
---
|
||||
dlls/wined3d/glsl_shader.c | 84 +++++++++++++++++++++++++++++++++++-----------
|
||||
1 file changed, 64 insertions(+), 20 deletions(-)
|
||||
|
||||
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
|
||||
index 31b892faf65..2c97ba8ef8d 100644
|
||||
--- a/dlls/wined3d/glsl_shader.c
|
||||
+++ b/dlls/wined3d/glsl_shader.c
|
||||
@@ -841,7 +841,7 @@ static void shader_glsl_generate_transform_feedback_varyings(const struct wined3
|
||||
continue;
|
||||
}
|
||||
|
||||
- string_buffer_sprintf(buffer, "shader_in_out.reg[%u]", e->register_idx);
|
||||
+ string_buffer_sprintf(buffer, "shader_in_out.reg%u", e->register_idx);
|
||||
append_transform_feedback_varying(varyings, &count, &strings, &length, buffer);
|
||||
}
|
||||
|
||||
@@ -1849,21 +1849,53 @@ static const char *shader_glsl_shader_output_name(const struct wined3d_gl_info *
|
||||
}
|
||||
|
||||
static void shader_glsl_declare_shader_inputs(const struct wined3d_gl_info *gl_info,
|
||||
- struct wined3d_string_buffer *buffer, unsigned int element_count)
|
||||
+ struct wined3d_string_buffer *buffer, unsigned int element_count, BOOL unroll)
|
||||
{
|
||||
if (shader_glsl_use_interface_blocks(gl_info))
|
||||
- shader_addline(buffer, "in shader_in_out { vec4 reg[%u]; } shader_in;\n", element_count);
|
||||
+ {
|
||||
+ if (unroll)
|
||||
+ {
|
||||
+ unsigned int i;
|
||||
+
|
||||
+ shader_addline(buffer, "in shader_in_out {\n");
|
||||
+ for (i = 0; i < element_count; ++i)
|
||||
+ shader_addline(buffer, "vec4 reg%u;\n", i);
|
||||
+ shader_addline(buffer, "} shader_in;\n");
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ shader_addline(buffer, "in shader_in_out { vec4 reg[%u]; } shader_in;\n", element_count);
|
||||
+ }
|
||||
+ }
|
||||
else
|
||||
+ {
|
||||
declare_in_varying(gl_info, buffer, FALSE, "vec4 ps_link[%u];\n", element_count);
|
||||
+ }
|
||||
}
|
||||
|
||||
static void shader_glsl_declare_shader_outputs(const struct wined3d_gl_info *gl_info,
|
||||
- struct wined3d_string_buffer *buffer, unsigned int element_count)
|
||||
+ struct wined3d_string_buffer *buffer, unsigned int element_count, BOOL unroll)
|
||||
{
|
||||
+ unsigned int i;
|
||||
+
|
||||
if (shader_glsl_use_interface_blocks(gl_info))
|
||||
- shader_addline(buffer, "out shader_in_out { vec4 reg[%u]; } shader_out;\n", element_count);
|
||||
+ {
|
||||
+ if (unroll)
|
||||
+ {
|
||||
+ shader_addline(buffer, "out shader_in_out {\n");
|
||||
+ for (i = 0; i < element_count; ++i)
|
||||
+ shader_addline(buffer, " vec4 reg%u;\n", i);
|
||||
+ shader_addline(buffer, "} shader_out;\n");
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ shader_addline(buffer, "out shader_in_out { vec4 reg[%u]; } shader_out;\n", element_count);
|
||||
+ }
|
||||
+ }
|
||||
else
|
||||
+ {
|
||||
declare_out_varying(gl_info, buffer, FALSE, "vec4 ps_link[%u];\n", element_count);
|
||||
+ }
|
||||
}
|
||||
|
||||
static const char *glsl_primitive_type_from_d3d(enum wined3d_primitive_type primitive_type)
|
||||
@@ -6304,7 +6336,7 @@ static void shader_glsl_dp2add(const struct wined3d_shader_instruction *ins)
|
||||
static void shader_glsl_input_pack(const struct wined3d_shader *shader, struct wined3d_string_buffer *buffer,
|
||||
const struct wined3d_shader_signature *input_signature,
|
||||
const struct wined3d_shader_reg_maps *reg_maps,
|
||||
- const struct ps_compile_args *args, const struct wined3d_gl_info *gl_info)
|
||||
+ const struct ps_compile_args *args, const struct wined3d_gl_info *gl_info, BOOL unroll)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
@@ -6351,10 +6383,16 @@ static void shader_glsl_input_pack(const struct wined3d_shader *shader, struct w
|
||||
{
|
||||
if (input->sysval_semantic)
|
||||
FIXME("Unhandled sysval semantic %#x.\n", input->sysval_semantic);
|
||||
- shader_addline(buffer, "ps_in[%u]%s = %s[%u]%s;\n",
|
||||
- shader->u.ps.input_reg_map[input->register_idx], reg_mask,
|
||||
- shader_glsl_shader_input_name(gl_info),
|
||||
- shader->u.ps.input_reg_map[input->register_idx], reg_mask);
|
||||
+ if (unroll)
|
||||
+ shader_addline(buffer, "ps_in[%u]%s = %s%u%s;\n",
|
||||
+ shader->u.ps.input_reg_map[input->register_idx], reg_mask,
|
||||
+ shader_glsl_shader_input_name(gl_info),
|
||||
+ shader->u.ps.input_reg_map[input->register_idx], reg_mask);
|
||||
+ else
|
||||
+ shader_addline(buffer, "ps_in[%u]%s = %s[%u]%s;\n",
|
||||
+ shader->u.ps.input_reg_map[input->register_idx], reg_mask,
|
||||
+ shader_glsl_shader_input_name(gl_info),
|
||||
+ shader->u.ps.input_reg_map[input->register_idx], reg_mask);
|
||||
}
|
||||
}
|
||||
else if (shader_match_semantic(semantic_name, WINED3D_DECL_USAGE_TEXCOORD))
|
||||
@@ -6545,7 +6583,8 @@ static void shader_glsl_setup_vs3_output(struct shader_glsl_priv *priv,
|
||||
|
||||
static void shader_glsl_setup_sm4_shader_output(struct shader_glsl_priv *priv,
|
||||
unsigned int input_count, const struct wined3d_shader_signature *output_signature,
|
||||
- const struct wined3d_shader_reg_maps *reg_maps_out, const char *output_variable_name)
|
||||
+ const struct wined3d_shader_reg_maps *reg_maps_out, const char *output_variable_name,
|
||||
+ BOOL rasterizer_setup)
|
||||
{
|
||||
struct wined3d_string_buffer *buffer = &priv->shader_buffer;
|
||||
char reg_mask[6];
|
||||
@@ -6566,8 +6605,12 @@ static void shader_glsl_setup_sm4_shader_output(struct shader_glsl_priv *priv,
|
||||
|
||||
shader_glsl_write_mask_to_str(output->mask, reg_mask);
|
||||
|
||||
- shader_addline(buffer, "%s.reg[%u]%s = outputs[%u]%s;\n",
|
||||
- output_variable_name, output->register_idx, reg_mask, output->register_idx, reg_mask);
|
||||
+ if (rasterizer_setup)
|
||||
+ shader_addline(buffer, "%s.reg%u%s = outputs[%u]%s;\n",
|
||||
+ output_variable_name, output->register_idx, reg_mask, output->register_idx, reg_mask);
|
||||
+ else
|
||||
+ shader_addline(buffer, "%s.reg[%u]%s = outputs[%u]%s;\n",
|
||||
+ output_variable_name, output->register_idx, reg_mask, output->register_idx, reg_mask);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6625,7 +6668,7 @@ static void shader_glsl_setup_sm3_rasterizer_input(struct shader_glsl_priv *priv
|
||||
shader_glsl_setup_vs3_output(priv, gl_info, map, input_signature, reg_maps_in,
|
||||
output_signature, reg_maps_out);
|
||||
else
|
||||
- shader_glsl_setup_sm4_shader_output(priv, input_count, output_signature, reg_maps_out, "shader_out");
|
||||
+ shader_glsl_setup_sm4_shader_output(priv, input_count, output_signature, reg_maps_out, "shader_out", TRUE);
|
||||
}
|
||||
|
||||
/* Context activation is done by the caller. */
|
||||
@@ -6757,7 +6800,7 @@ static GLuint shader_glsl_generate_vs3_rasterizer_input_setup(struct shader_glsl
|
||||
{
|
||||
unsigned int in_count = min(vec4_varyings(ps_major, gl_info), ps->limits->packed_input);
|
||||
|
||||
- shader_glsl_declare_shader_outputs(gl_info, buffer, in_count);
|
||||
+ shader_glsl_declare_shader_outputs(gl_info, buffer, in_count, FALSE);
|
||||
shader_addline(buffer, "void setup_vs_output(in vec4 outputs[%u])\n{\n", vs->limits->packed_output);
|
||||
shader_glsl_setup_sm3_rasterizer_input(priv, gl_info, ps->u.ps.input_reg_map, &ps->input_signature,
|
||||
&ps->reg_maps, 0, &vs->output_signature, &vs->reg_maps, per_vertex_point_size);
|
||||
@@ -6783,7 +6826,7 @@ static void shader_glsl_generate_sm4_output_setup(struct shader_glsl_priv *priv,
|
||||
input_count = min(vec4_varyings(4, gl_info), input_count);
|
||||
|
||||
if (input_count)
|
||||
- shader_glsl_declare_shader_outputs(gl_info, buffer, input_count);
|
||||
+ shader_glsl_declare_shader_outputs(gl_info, buffer, input_count, rasterizer_setup);
|
||||
|
||||
shader_addline(buffer, "void setup_%s_output(in vec4 outputs[%u])\n{\n",
|
||||
prefix, shader->limits->packed_output);
|
||||
@@ -6793,7 +6836,7 @@ static void shader_glsl_generate_sm4_output_setup(struct shader_glsl_priv *priv,
|
||||
NULL, input_count, &shader->output_signature, &shader->reg_maps, FALSE);
|
||||
else
|
||||
shader_glsl_setup_sm4_shader_output(priv, input_count, &shader->output_signature,
|
||||
- &shader->reg_maps, "shader_out");
|
||||
+ &shader->reg_maps, "shader_out", rasterizer_setup);
|
||||
|
||||
shader_addline(buffer, "}\n");
|
||||
}
|
||||
@@ -7119,7 +7162,7 @@ static GLuint shader_glsl_generate_pshader(const struct wined3d_context *context
|
||||
unsigned int in_count = min(vec4_varyings(version->major, gl_info), shader->limits->packed_input);
|
||||
|
||||
if (args->vp_mode == vertexshader && reg_maps->input_registers)
|
||||
- shader_glsl_declare_shader_inputs(gl_info, buffer, in_count);
|
||||
+ shader_glsl_declare_shader_inputs(gl_info, buffer, in_count, version->major >= 4);
|
||||
shader_addline(buffer, "vec4 %s_in[%u];\n", prefix, in_count);
|
||||
}
|
||||
|
||||
@@ -7265,7 +7308,8 @@ static GLuint shader_glsl_generate_pshader(const struct wined3d_context *context
|
||||
|
||||
/* Pack 3.0 inputs */
|
||||
if (reg_maps->shader_version.major >= 3)
|
||||
- shader_glsl_input_pack(shader, buffer, &shader->input_signature, reg_maps, args, gl_info);
|
||||
+ shader_glsl_input_pack(shader, buffer, &shader->input_signature, reg_maps, args, gl_info,
|
||||
+ reg_maps->shader_version.major >= 4);
|
||||
|
||||
/* Base Shader Body */
|
||||
if (FAILED(shader_generate_code(shader, buffer, reg_maps, &priv_ctx, NULL, NULL)))
|
||||
@@ -7494,7 +7538,7 @@ static GLuint shader_glsl_generate_hull_shader(const struct wined3d_context *con
|
||||
shader_addline(buffer, "void setup_hs_output(in vec4 outputs[%u])\n{\n",
|
||||
shader->limits->packed_output);
|
||||
shader_glsl_setup_sm4_shader_output(priv, shader->limits->packed_output, &shader->output_signature,
|
||||
- &shader->reg_maps, "shader_out[gl_InvocationID]");
|
||||
+ &shader->reg_maps, "shader_out[gl_InvocationID]", FALSE);
|
||||
shader_addline(buffer, "}\n");
|
||||
}
|
||||
|
||||
--
|
||||
2.14.1
|
||||
|
Reference in New Issue
Block a user