Module: wine Branch: master Commit: d0756ee537514795d20486809900f29933c4181a URL: http://source.winehq.org/git/wine.git/?a=commit;h=d0756ee537514795d204868099...
Author: Stefan Dösinger stefan@codeweavers.com Date: Thu May 21 12:00:16 2009 +0200
wined3d: Support ABS and ABSNEG with NV extensions if available.
---
dlls/wined3d/arb_program_shader.c | 16 +++++++++++++--- 1 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c index 7e56175..63dd81e 100644 --- a/dlls/wined3d/arb_program_shader.c +++ b/dlls/wined3d/arb_program_shader.c @@ -811,6 +811,7 @@ static void shader_arb_get_src_param(const struct wined3d_shader_instruction *in char swzstr[20]; int insert_line; SHADER_BUFFER *buffer = ins->ctx->buffer; + struct shader_arb_ctx_priv *ctx = ins->ctx->backend_data;
/* Assume a new line will be added */ insert_line = 1; @@ -859,11 +860,20 @@ static void shader_arb_get_src_param(const struct wined3d_shader_instruction *in shader_addline(buffer, "MUL T%c, %s, T%c;\n", 'A' + tmpreg, regstr, 'A' + tmpreg); break; case WINED3DSPSM_ABS: - shader_addline(buffer, "ABS T%c, %s;\n", 'A' + tmpreg, regstr); + if(ctx->target_version >= NV2) { + sprintf(outregstr, "|%s%s|", regstr, swzstr); + insert_line = 0; + } else { + shader_addline(buffer, "ABS T%c, %s;\n", 'A' + tmpreg, regstr); + } break; case WINED3DSPSM_ABSNEG: - shader_addline(buffer, "ABS T%c, %s;\n", 'A' + tmpreg, regstr); - sprintf(outregstr, "-T%c%s", 'A' + tmpreg, swzstr); + if(ctx->target_version >= NV2) { + sprintf(outregstr, "-|%s%s|", regstr, swzstr); + } else { + shader_addline(buffer, "ABS T%c, %s;\n", 'A' + tmpreg, regstr); + sprintf(outregstr, "-T%c%s", 'A' + tmpreg, swzstr); + } insert_line = 0; break; default: