Henri Verbeet : wined3d: Handle relative addresses in the common code in shader_glsl_get_register_name ().
Alexandre Julliard
julliard at winehq.org
Mon Nov 12 14:14:40 CST 2012
Module: wine
Branch: master
Commit: 0a7b32e3f08d68feddd563afca3c03416cc4cb00
URL: http://source.winehq.org/git/wine.git/?a=commit;h=0a7b32e3f08d68feddd563afca3c03416cc4cb00
Author: Henri Verbeet <hverbeet at codeweavers.com>
Date: Sun Nov 11 18:52:39 2012 +0100
wined3d: Handle relative addresses in the common code in shader_glsl_get_register_name().
---
dlls/wined3d/glsl_shader.c | 39 ++++++++++++++++-----------------------
1 files changed, 16 insertions(+), 23 deletions(-)
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index 1e09c9e..66cee1b 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -1378,7 +1378,12 @@ static void shader_glsl_get_register_name(const struct wined3d_shader_register *
const struct wined3d_shader_version *version = ®_maps->shader_version;
const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
const char *prefix = shader_glsl_get_prefix(version->type);
+ struct glsl_src_param rel_param0, rel_param1;
+ if (reg->idx[0].offset != ~0U && reg->idx[0].rel_addr)
+ shader_glsl_add_src_param(ins, reg->idx[0].rel_addr, WINED3DSP_WRITEMASK_0, &rel_param0);
+ if (reg->idx[1].offset != ~0U && reg->idx[1].rel_addr)
+ shader_glsl_add_src_param(ins, reg->idx[1].rel_addr, WINED3DSP_WRITEMASK_0, &rel_param1);
*is_color = FALSE;
switch (reg->type)
@@ -1406,24 +1411,20 @@ static void shader_glsl_get_register_name(const struct wined3d_shader_register *
if (reg->idx[0].rel_addr)
{
- struct glsl_src_param rel_param;
-
- shader_glsl_add_src_param(ins, reg->idx[0].rel_addr, WINED3DSP_WRITEMASK_0, &rel_param);
-
- /* Removing a + 0 would be an obvious optimization, but macos doesn't see the NOP
- * operation there */
+ /* Removing a + 0 would be an obvious optimization, but
+ * OS X doesn't see the NOP operation there. */
if (idx)
{
if (shader->u.ps.declared_in_count > in_count)
{
sprintf(register_name,
"((%s + %u) > %u ? (%s + %u) > %u ? gl_SecondaryColor : gl_Color : %s_in[%s + %u])",
- rel_param.param_str, idx, in_count - 1, rel_param.param_str, idx, in_count,
- prefix, rel_param.param_str, idx);
+ rel_param0.param_str, idx, in_count - 1, rel_param0.param_str, idx, in_count,
+ prefix, rel_param0.param_str, idx);
}
else
{
- sprintf(register_name, "%s_in[%s + %u]", prefix, rel_param.param_str, idx);
+ sprintf(register_name, "%s_in[%s + %u]", prefix, rel_param0.param_str, idx);
}
}
else
@@ -1431,12 +1432,12 @@ static void shader_glsl_get_register_name(const struct wined3d_shader_register *
if (shader->u.ps.declared_in_count > in_count)
{
sprintf(register_name, "((%s) > %u ? (%s) > %u ? gl_SecondaryColor : gl_Color : %s_in[%s])",
- rel_param.param_str, in_count - 1, rel_param.param_str, in_count,
- prefix, rel_param.param_str);
+ rel_param0.param_str, in_count - 1, rel_param0.param_str, in_count,
+ prefix, rel_param0.param_str);
}
else
{
- sprintf(register_name, "%s_in[%s]", prefix, rel_param.param_str);
+ sprintf(register_name, "%s_in[%s]", prefix, rel_param0.param_str);
}
}
}
@@ -1462,12 +1463,10 @@ static void shader_glsl_get_register_name(const struct wined3d_shader_register *
/* Relative addressing */
if (reg->idx[0].rel_addr)
{
- struct glsl_src_param rel_param;
- shader_glsl_add_src_param(ins, reg->idx[0].rel_addr, WINED3DSP_WRITEMASK_0, &rel_param);
if (reg->idx[0].offset)
- sprintf(register_name, "%s_c[%s + %u]", prefix, rel_param.param_str, reg->idx[0].offset);
+ sprintf(register_name, "%s_c[%s + %u]", prefix, rel_param0.param_str, reg->idx[0].offset);
else
- sprintf(register_name, "%s_c[%s]", prefix, rel_param.param_str);
+ sprintf(register_name, "%s_c[%s]", prefix, rel_param0.param_str);
}
else
{
@@ -1606,16 +1605,10 @@ static void shader_glsl_get_register_name(const struct wined3d_shader_register *
case WINED3DSPR_CONSTBUFFER:
if (reg->idx[1].rel_addr)
- {
- struct glsl_src_param rel_param;
- shader_glsl_add_src_param(ins, reg->idx[1].rel_addr, WINED3DSP_WRITEMASK_0, &rel_param);
sprintf(register_name, "%s_cb%u[%s + %u]",
- prefix, reg->idx[0].offset, rel_param.param_str, reg->idx[1].offset);
- }
+ prefix, reg->idx[0].offset, rel_param1.param_str, reg->idx[1].offset);
else
- {
sprintf(register_name, "%s_cb%u[%u]", prefix, reg->idx[0].offset, reg->idx[1].offset);
- }
break;
case WINED3DSPR_PRIMID:
More information about the wine-cvs
mailing list