[10/10] wined3d: Handle the ps_3_0 vPos field

H. Verbeet hverbeet at gmail.com
Thu May 3 14:01:09 CDT 2007


This should improve SM3.0 support a little.

Changelog:
  - Handle the ps_3_0 vPos field
-------------- next part --------------
---

 dlls/wined3d/baseshader.c  |    8 ++++++++
 dlls/wined3d/glsl_shader.c |   12 ++++++++++++
 2 files changed, 20 insertions(+), 0 deletions(-)

diff --git a/dlls/wined3d/baseshader.c b/dlls/wined3d/baseshader.c
index 2944663..8035abb 100644
--- a/dlls/wined3d/baseshader.c
+++ b/dlls/wined3d/baseshader.c
@@ -519,6 +519,7 @@ void shader_dump_param(
 
     IWineD3DBaseShaderImpl* This = (IWineD3DBaseShaderImpl*) iface;
     static const char * const rastout_reg_names[] = { "oPos", "oFog", "oPts" };
+    static const char * const misctype_reg_names[] = { "vPos", "vFace"};
     char swizzle_reg_chars[4];
 
     DWORD reg = param & WINED3DSP_REGNUM_MASK;
@@ -611,6 +612,13 @@ void shader_dump_param(
         case WINED3DSPR_SAMPLER:
             TRACE("s%u", reg);
             break;
+        case WINED3DSPR_MISCTYPE:
+            if (reg > 1) {
+                FIXME("Unhandled misctype register %d\n", reg);
+            } else {
+                TRACE("%s", misctype_reg_names[reg]);
+            }
+            break;
         case WINED3DSPR_PREDICATE:
             TRACE("p%u", reg);
             break;
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index f6d55d1..9ff5378 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -690,6 +690,18 @@ static void shader_glsl_get_register_name(
         else
             sprintf(tmpStr, "gl_TexCoord[%u]", reg);
     break;
+    case WINED3DSPR_MISCTYPE:
+        if (reg == 0) {
+            /* vPos */
+            sprintf(tmpStr, "gl_FragCoord");
+        } else {
+            /* gl_FrontFacing could be used for vFace, but note that
+             * gl_FrontFacing is a bool, while vFace is a float for
+             * which the sign determines front/back */
+            FIXME("Unhandled misctype register %d\n", reg);
+            sprintf(tmpStr, "unrecognized_register");
+        }
+        break;
     default:
         FIXME("Unhandled register name Type(%d)\n", regtype);
         sprintf(tmpStr, "unrecognized_register");


More information about the wine-patches mailing list