Henri Verbeet : wined3d: Merge a couple of shader type specific blocks in shader_generate_glsl_declarations ().
Alexandre Julliard
julliard at winehq.org
Mon Oct 22 13:42:44 CDT 2012
Module: wine
Branch: master
Commit: 7a437c29f3943b608eaaa81039437a38c37eb511
URL: http://source.winehq.org/git/wine.git/?a=commit;h=7a437c29f3943b608eaaa81039437a38c37eb511
Author: Henri Verbeet <hverbeet at codeweavers.com>
Date: Sun Oct 21 20:20:38 2012 +0200
wined3d: Merge a couple of shader type specific blocks in shader_generate_glsl_declarations().
---
dlls/wined3d/glsl_shader.c | 144 ++++++++++++++++++++++----------------------
1 files changed, 71 insertions(+), 73 deletions(-)
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index ef54f93..0e34874 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -1000,58 +1000,6 @@ static void shader_generate_glsl_declarations(const struct wined3d_context *cont
shader_addline(buffer, "uniform vec4 %s_cb%u[%u];\n", prefix, i, reg_maps->cb_sizes[i]);
}
- if (!pshader)
- {
- shader_addline(buffer, "uniform vec4 posFixup;\n");
- shader_addline(buffer, "void order_ps_input(in vec4[%u]);\n", shader->limits.packed_output);
- }
- else
- {
- for (i = 0, map = reg_maps->bumpmat; map; map >>= 1, ++i)
- {
- if (!(map & 1)) continue;
-
- shader_addline(buffer, "uniform mat2 bumpenvmat%d;\n", i);
-
- if (reg_maps->luminanceparams & (1 << i))
- {
- shader_addline(buffer, "uniform float luminancescale%d;\n", i);
- shader_addline(buffer, "uniform float luminanceoffset%d;\n", i);
- extra_constants_needed++;
- }
-
- extra_constants_needed++;
- }
-
- if (ps_args->srgb_correction)
- {
- shader_addline(buffer, "const vec4 srgb_const0 = vec4(%.8e, %.8e, %.8e, %.8e);\n",
- srgb_pow, srgb_mul_high, srgb_sub_high, srgb_mul_low);
- shader_addline(buffer, "const vec4 srgb_const1 = vec4(%.8e, 0.0, 0.0, 0.0);\n",
- srgb_cmp);
- }
- if (reg_maps->vpos || reg_maps->usesdsy)
- {
- if (shader->limits.constant_float + extra_constants_needed
- + 1 < gl_info->limits.glsl_ps_float_constants)
- {
- shader_addline(buffer, "uniform vec4 ycorrection;\n");
- extra_constants_needed++;
- }
- else
- {
- /* This happens because we do not have proper tracking of the constant registers that are
- * actually used, only the max limit of the shader version
- */
- FIXME("Cannot find a free uniform for vpos correction params\n");
- shader_addline(buffer, "const vec4 ycorrection = vec4(%f, %f, 0.0, 0.0);\n",
- context->render_offscreen ? 0.0f : fb->render_targets[0]->resource.height,
- context->render_offscreen ? 1.0f : -1.0f);
- }
- shader_addline(buffer, "vec4 vpos;\n");
- }
- }
-
/* Declare texture samplers */
for (i = 0; i < shader->limits.sampler; ++i)
{
@@ -1145,20 +1093,79 @@ static void shader_generate_glsl_declarations(const struct wined3d_context *cont
if (map & 1) shader_addline(buffer, "vec4 T%u = gl_TexCoord[%u];\n", i, i);
}
- /* Declare input register varyings. Only pixel shader, vertex shaders have that declared in the
- * helper function shader that is linked in at link time
- */
- if (pshader && reg_maps->shader_version.major >= 3)
+ if (!pshader)
{
- UINT in_count = min(vec4_varyings(reg_maps->shader_version.major, gl_info), shader->limits.packed_input);
+ /* Declare attributes. */
+ for (i = 0, map = reg_maps->input_registers; map; map >>= 1, ++i)
+ {
+ if (map & 1)
+ shader_addline(buffer, "attribute vec4 %s_in%u;\n", prefix, i);
+ }
- if (use_vs(state))
- shader_addline(buffer, "varying vec4 %s_in[%u];\n", prefix, in_count);
- else
- /* TODO: Write a replacement shader for the fixed function vertex pipeline, so this isn't needed.
- * For fixed function vertex processing + 3.0 pixel shader we need a separate function in the
- * pixel shader that reads the fixed function color into the packed input registers. */
- shader_addline(buffer, "vec4 %s_in[%u];\n", prefix, in_count);
+ shader_addline(buffer, "uniform vec4 posFixup;\n");
+ shader_addline(buffer, "void order_ps_input(in vec4[%u]);\n", shader->limits.packed_output);
+ }
+ else
+ {
+ if (reg_maps->shader_version.major >= 3)
+ {
+ UINT in_count = min(vec4_varyings(reg_maps->shader_version.major, gl_info), shader->limits.packed_input);
+
+ if (use_vs(state))
+ shader_addline(buffer, "varying vec4 %s_in[%u];\n", prefix, in_count);
+ else
+ /* TODO: Write a replacement shader for the fixed function
+ * vertex pipeline, so this isn't needed. For fixed function
+ * vertex processing + 3.0 pixel shader we need a separate
+ * function in the pixel shader that reads the fixed function
+ * color into the packed input registers. */
+ shader_addline(buffer, "vec4 %s_in[%u];\n", prefix, in_count);
+ }
+
+ for (i = 0, map = reg_maps->bumpmat; map; map >>= 1, ++i)
+ {
+ if (!(map & 1))
+ continue;
+
+ shader_addline(buffer, "uniform mat2 bumpenvmat%d;\n", i);
+
+ if (reg_maps->luminanceparams & (1 << i))
+ {
+ shader_addline(buffer, "uniform float luminancescale%d;\n", i);
+ shader_addline(buffer, "uniform float luminanceoffset%d;\n", i);
+ extra_constants_needed++;
+ }
+
+ extra_constants_needed++;
+ }
+
+ if (ps_args->srgb_correction)
+ {
+ shader_addline(buffer, "const vec4 srgb_const0 = vec4(%.8e, %.8e, %.8e, %.8e);\n",
+ srgb_pow, srgb_mul_high, srgb_sub_high, srgb_mul_low);
+ shader_addline(buffer, "const vec4 srgb_const1 = vec4(%.8e, 0.0, 0.0, 0.0);\n",
+ srgb_cmp);
+ }
+ if (reg_maps->vpos || reg_maps->usesdsy)
+ {
+ if (shader->limits.constant_float + extra_constants_needed
+ + 1 < gl_info->limits.glsl_ps_float_constants)
+ {
+ shader_addline(buffer, "uniform vec4 ycorrection;\n");
+ extra_constants_needed++;
+ }
+ else
+ {
+ /* This happens because we do not have proper tracking of the constant registers that are
+ * actually used, only the max limit of the shader version
+ */
+ FIXME("Cannot find a free uniform for vpos correction params\n");
+ shader_addline(buffer, "const vec4 ycorrection = vec4(%f, %f, 0.0, 0.0);\n",
+ context->render_offscreen ? 0.0f : fb->render_targets[0]->resource.height,
+ context->render_offscreen ? 1.0f : -1.0f);
+ }
+ shader_addline(buffer, "vec4 vpos;\n");
+ }
}
/* Declare output register temporaries */
@@ -1171,15 +1178,6 @@ static void shader_generate_glsl_declarations(const struct wined3d_context *cont
if (map & 1) shader_addline(buffer, "vec4 R%u;\n", i);
}
- /* Declare attributes */
- if (reg_maps->shader_version.type == WINED3D_SHADER_TYPE_VERTEX)
- {
- for (i = 0, map = reg_maps->input_registers; map; map >>= 1, ++i)
- {
- if (map & 1) shader_addline(buffer, "attribute vec4 %s_in%u;\n", prefix, i);
- }
- }
-
/* Declare loop registers aLx */
if (reg_maps->shader_version.major < 4)
{
More information about the wine-cvs
mailing list