[PATCH] WineD3D: Implement D3DTOP_BUMPENVMAPLUMINANCE=0A=

Stefan Doesinger stefan at codeweavers.com
Tue Aug 19 10:51:04 CDT 2008


=0A=
---=0A=
 dlls/d3d9/tests/visual.c          |   88 =
+++++++++++++++++++++++++++++++++++--=0A=
 dlls/wined3d/arb_program_shader.c |   71 +++++++++++++++++++++++++++---=0A=
 2 files changed, 149 insertions(+), 10 deletions(-)=0A=
=0A=
diff --git a/dlls/d3d9/tests/visual.c b/dlls/d3d9/tests/visual.c=0A=
index 8818eab..25085f0 100644=0A=
--- a/dlls/d3d9/tests/visual.c=0A=
+++ b/dlls/d3d9/tests/visual.c=0A=
@@ -7661,6 +7661,9 @@ static void =
fixed_function_bumpmap_test(IDirect3DDevice9 *device)=0A=
     DWORD color;=0A=
     int i;=0A=
     D3DCAPS9 caps;=0A=
+    BOOL L6V5U5_supported =3D FALSE;=0A=
+    IDirect3DTexture9 *tex1, *tex2;=0A=
+    D3DLOCKED_RECT locked_rect;=0A=
 =0A=
     static const float quad[][7] =3D {=0A=
         {-128.0f/640.0f, -128.0f/480.0f, 0.1f, 0.0f, 0.0f, 0.0f, 0.0f},=0A=
@@ -7678,6 +7681,7 @@ static void =
fixed_function_bumpmap_test(IDirect3DDevice9 *device)=0A=
 =0A=
     /* use asymmetric matrix to test loading */=0A=
     float bumpenvmat[4] =3D {0.0,0.5,-0.5,0.0};=0A=
+    float scale, offset;=0A=
 =0A=
     IDirect3DVertexDeclaration9 *vertex_declaration =3D NULL;=0A=
     IDirect3DTexture9           *texture            =3D NULL;=0A=
@@ -7697,6 +7701,9 @@ static void =
fixed_function_bumpmap_test(IDirect3DDevice9 *device)=0A=
 =0A=
         IDirect3DDevice9_GetDirect3D(device, &d3d9);=0A=
         hr =3D IDirect3D9_CheckDeviceFormat(d3d9, 0, D3DDEVTYPE_HAL, =
D3DFMT_X8R8G8B8, 0,=0A=
+                                          D3DRTYPE_TEXTURE, =
D3DFMT_L6V5U5);=0A=
+        L6V5U5_supported =3D SUCCEEDED(hr);=0A=
+        hr =3D IDirect3D9_CheckDeviceFormat(d3d9, 0, D3DDEVTYPE_HAL, =
D3DFMT_X8R8G8B8, 0,=0A=
                                           D3DRTYPE_TEXTURE, =
D3DFMT_V8U8);=0A=
         IDirect3D9_Release(d3d9);=0A=
         if(FAILED(hr)) {=0A=
@@ -7781,10 +7788,6 @@ static void =
fixed_function_bumpmap_test(IDirect3DDevice9 *device)=0A=
     color =3D getPixelColor(device, 320-32, 240-32);=0A=
     ok(color_match(color, 0x00000000, 4), "bumpmap failed: Got color =
0x%08x, expected 0x00000000.\n", color);=0A=
 =0A=
-    hr =3D IDirect3DDevice9_SetVertexDeclaration(device, NULL);=0A=
-    ok(SUCCEEDED(hr), "SetVertexDeclaration failed (%08x)\n", hr);=0A=
-    IDirect3DVertexDeclaration9_Release(vertex_declaration);=0A=
-=0A=
     for(i =3D 0; i < 2; i++) {=0A=
         hr =3D IDirect3DDevice9_GetTexture(device, i, =
(IDirect3DBaseTexture9 **) &texture);=0A=
         ok(SUCCEEDED(hr), "IDirect3DDevice9_GetTexture failed =
(0x%08x)\n", hr);=0A=
@@ -7794,11 +7797,88 @@ static void =
fixed_function_bumpmap_test(IDirect3DDevice9 *device)=0A=
         IDirect3DTexture9_Release(texture); /* To destroy it */=0A=
     }=0A=
 =0A=
+    if(!(caps.TextureOpCaps & D3DTEXOPCAPS_BUMPENVMAPLUMINANCE)) {=0A=
+        skip("D3DTOP_BUMPENVMAPLUMINANCE not supported, skipping\n");=0A=
+        goto cleanup;=0A=
+    }=0A=
+    if(L6V5U5_supported =3D=3D FALSE) {=0A=
+        skip("L6V5U5_supported not supported, skipping =
D3DTOP_BUMPENVMAPLUMINANCE test\n");=0A=
+        goto cleanup;=0A=
+    }=0A=
+=0A=
+    hr =3D IDirect3DDevice9_Clear(device, 0, NULL, D3DCLEAR_TARGET, =
0x00000000, 0.0, 0x8);=0A=
+    ok(hr =3D=3D D3D_OK, "IDirect3DDevice9_Clear returned %08x\n", hr);=0A=
+    /* This test only tests the luminance part. The bumpmapping part =
was already tested above and=0A=
+     * would only make this test more complicated=0A=
+     */=0A=
+    hr =3D IDirect3DDevice9_CreateTexture(device, 1, 1, 1, 0, =
D3DFMT_L6V5U5, D3DPOOL_MANAGED, &tex1, NULL);=0A=
+    ok(hr =3D=3D D3D_OK, "IDirect3DDevice9_CreateTexture failed, =
hr=3D%08x\n", hr);=0A=
+    hr =3D IDirect3DDevice9_CreateTexture(device, 1, 1, 1, 0, =
D3DFMT_X8R8G8B8, D3DPOOL_MANAGED, &tex2, NULL);=0A=
+    ok(hr =3D=3D D3D_OK, "IDirect3DDevice9_CreateTexture failed, =
hr=3D%08x\n", hr);=0A=
+=0A=
+    memset(&locked_rect, 0, sizeof(locked_rect));=0A=
+    hr =3D IDirect3DTexture9_LockRect(tex1, 0, &locked_rect, NULL, 0);=0A=
+    ok(SUCCEEDED(hr), "LockRect failed with 0x%08x\n", hr);=0A=
+    *((DWORD *)locked_rect.pBits) =3D 0x4000; /* L =3D 0.25, V =3D 0.0, =
U =3D 0.0 */=0A=
+    hr =3D IDirect3DTexture9_UnlockRect(tex1, 0);=0A=
+    ok(SUCCEEDED(hr), "UnlockRect failed with 0x%08x\n", hr);=0A=
+=0A=
+    memset(&locked_rect, 0, sizeof(locked_rect));=0A=
+    hr =3D IDirect3DTexture9_LockRect(tex2, 0, &locked_rect, NULL, 0);=0A=
+    ok(SUCCEEDED(hr), "LockRect failed with 0x%08x\n", hr);=0A=
+    *((DWORD *)locked_rect.pBits) =3D 0x00ff80c0;=0A=
+    hr =3D IDirect3DTexture9_UnlockRect(tex2, 0);=0A=
+    ok(SUCCEEDED(hr), "UnlockRect failed with 0x%08x\n", hr);=0A=
+=0A=
+    hr =3D IDirect3DDevice9_SetTexture(device, 0, =
(IDirect3DBaseTexture9 *) tex1);=0A=
+    ok(SUCCEEDED(hr), "IDirect3DDevice9_SetTexture failed (%08x)\n", =
hr);=0A=
+    hr =3D IDirect3DDevice9_SetTexture(device, 1, =
(IDirect3DBaseTexture9 *) tex2);=0A=
+    ok(SUCCEEDED(hr), "IDirect3DDevice9_SetTexture failed (%08x)\n", =
hr);=0A=
+=0A=
+    hr =3D IDirect3DDevice9_SetTextureStageState(device, 0, =
D3DTSS_COLOROP, D3DTOP_BUMPENVMAPLUMINANCE);=0A=
+    ok(SUCCEEDED(hr), "SetTextureStageState failed (%08x)\n", hr);=0A=
+    scale =3D 2.0;=0A=
+    hr =3D IDirect3DDevice9_SetTextureStageState(device, 0, =
D3DTSS_BUMPENVLSCALE, *((DWORD *)&scale));=0A=
+    ok(SUCCEEDED(hr), "SetTextureStageState failed (%08x)\n", hr);=0A=
+    offset =3D 0.1;=0A=
+    hr =3D IDirect3DDevice9_SetTextureStageState(device, 0, =
D3DTSS_BUMPENVLOFFSET, *((DWORD *)&offset));=0A=
+    ok(SUCCEEDED(hr), "SetTextureStageState failed (%08x)\n", hr);=0A=
+=0A=
+    hr =3D IDirect3DDevice9_BeginScene(device);=0A=
+    ok(SUCCEEDED(hr), "BeginScene failed (0x%08x)\n", hr);=0A=
+    if(SUCCEEDED(hr)) {=0A=
+        hr =3D IDirect3DDevice9_DrawPrimitiveUP(device, =
D3DPT_TRIANGLESTRIP, 2, &quad[0], sizeof(quad[0]));=0A=
+        ok(SUCCEEDED(hr), "DrawPrimitiveUP failed (0x%08x)\n", hr);=0A=
+        hr =3D IDirect3DDevice9_EndScene(device);=0A=
+        ok(SUCCEEDED(hr), "EndScene failed (0x%08x)\n", hr);=0A=
+    }=0A=
+=0A=
+    hr =3D IDirect3DDevice9_Present(device, NULL, NULL, NULL, NULL);=0A=
+    ok(SUCCEEDED(hr), "Present failed (0x%08x)\n", hr);=0A=
+    color =3D getPixelColor(device, 320, 240);=0A=
+    /* red:   1.0  * (0.25 * 2.0 + 0.1) =3D 1.0  * 0.6 =3D 0.6  =3D 0x99=0A=
+     * green: 0.5  * (0.25 * 2.0 + 0.1) =3D 0.5  * 0.6 =3D 0.3  =3D 0x4c=0A=
+     * green: 0.75 * (0.25 * 2.0 + 0.1) =3D 0.75 * 0.6 =3D 0.45 =3D 0x72=0A=
+     */=0A=
+    ok(color_match(color, 0x00994c72, 2), "bumpmap failed: Got color =
0x%08x, expected 0x00ffffff.\n", color);=0A=
+=0A=
+    hr =3D IDirect3DDevice9_SetTexture(device, 0, NULL);=0A=
+    ok(SUCCEEDED(hr), "IDirect3DDevice9_SetTexture failed (%08x)\n", =
hr);=0A=
+    hr =3D IDirect3DDevice9_SetTexture(device, 1, NULL);=0A=
+    ok(SUCCEEDED(hr), "IDirect3DDevice9_SetTexture failed (%08x)\n", =
hr);=0A=
+=0A=
+    IDirect3DTexture9_Release(tex1);=0A=
+    IDirect3DTexture9_Release(tex2);=0A=
+=0A=
+cleanup:=0A=
     hr =3D IDirect3DDevice9_SetTextureStageState(device, 1, =
D3DTSS_COLOROP, D3DTOP_DISABLE);=0A=
     ok(SUCCEEDED(hr), "SetTextureStageState failed (%08x)\n", hr);=0A=
     hr =3D IDirect3DDevice9_SetTextureStageState(device, 0, =
D3DTSS_COLOROP, D3DTOP_MODULATE);=0A=
     ok(SUCCEEDED(hr), "SetTextureStageState failed (%08x)\n", hr);=0A=
 =0A=
+    hr =3D IDirect3DDevice9_SetVertexDeclaration(device, NULL);=0A=
+    ok(SUCCEEDED(hr), "SetVertexDeclaration failed (%08x)\n", hr);=0A=
+    IDirect3DVertexDeclaration9_Release(vertex_declaration);=0A=
 }=0A=
 =0A=
 static void stencil_cull_test(IDirect3DDevice9 *device) {=0A=
diff --git a/dlls/wined3d/arb_program_shader.c =
b/dlls/wined3d/arb_program_shader.c=0A=
index a701f36..1f27ec4 100644=0A=
--- a/dlls/wined3d/arb_program_shader.c=0A=
+++ b/dlls/wined3d/arb_program_shader.c=0A=
@@ -2220,9 +2220,10 @@ const shader_backend_t arb_program_shader_backend =
=3D {=0A=
 };=0A=
 =0A=
 /* ARB_fragment_program fixed function pipeline replacement definitions =
*/=0A=
-#define ARB_FFP_CONST_TFACTOR     0=0A=
-#define ARB_FFP_CONST_CONSTANT(i) ((ARB_FFP_CONST_TFACTOR) + 1 + i)=0A=
-#define ARB_FFP_CONST_BUMPMAT(i)  ((ARB_FFP_CONST_CONSTANT(7)) + 1 + i)=0A=
+#define ARB_FFP_CONST_TFACTOR       0=0A=
+#define ARB_FFP_CONST_CONSTANT(i)   ((ARB_FFP_CONST_TFACTOR) + 1 + i)=0A=
+#define ARB_FFP_CONST_BUMPMAT(i)    ((ARB_FFP_CONST_CONSTANT(7)) + 1 + =
i)=0A=
+#define ARB_FFP_CONST_LUMINANCE(i)  ((ARB_FFP_CONST_BUMPMAT(7)) + 1 + i)=0A=
 =0A=
 struct arbfp_ffp_desc=0A=
 {=0A=
@@ -2307,10 +2308,10 @@ static void arbfp_get_caps(WINED3DDEVTYPE =
devtype, WineD3D_GL_Info *gl_info, str=0A=
                            WINED3DTEXOPCAPS_DOTPRODUCT3                 =
|=0A=
                            WINED3DTEXOPCAPS_MULTIPLYADD                 =
|=0A=
                            WINED3DTEXOPCAPS_LERP                        =
|=0A=
-                           WINED3DTEXOPCAPS_BUMPENVMAP;=0A=
+                           WINED3DTEXOPCAPS_BUMPENVMAP                  =
|=0A=
+                           WINED3DTEXOPCAPS_BUMPENVMAPLUMINANCE;=0A=
 =0A=
-    /* TODO: Implement WINED3DTEXOPCAPS_BUMPENVMAPLUMINANCE=0A=
-    and WINED3DTEXOPCAPS_PREMODULATE */=0A=
+    /* TODO: Implement WINED3DTEXOPCAPS_PREMODULATE */=0A=
 =0A=
     caps->MaxTextureBlendStages   =3D 8;=0A=
     caps->MaxSimultaneousTextures =3D min(GL_LIMITS(fragment_samplers), =
8);=0A=
@@ -2371,6 +2372,39 @@ static void set_bumpmat_arbfp(DWORD state, =
IWineD3DStateBlockImpl *stateblock, W=0A=
     }=0A=
 }=0A=
 =0A=
+static void tex_bumpenvlum_arbfp(DWORD state, IWineD3DStateBlockImpl =
*stateblock, WineD3DContext *context) {=0A=
+    DWORD stage =3D (state - STATE_TEXTURESTAGE(0, 0)) / =
WINED3D_HIGHEST_TEXTURE_STATE;=0A=
+    IWineD3DDeviceImpl *device =3D stateblock->wineD3DDevice;=0A=
+    float param[4];=0A=
+=0A=
+    if(use_ps(device)) {=0A=
+        if(stage !=3D 0 &&=0A=
+           ((IWineD3DPixelShaderImpl *) =
stateblock->pixelShader)->baseShader.reg_maps.luminanceparams[stage]) {=0A=
+            /* The pixel shader has to know the luminance offset. Do a =
constants update if it=0A=
+             * isn't scheduled anyway=0A=
+             */=0A=
+            if(!isStateDirty(context, STATE_PIXELSHADERCONSTANT)) {=0A=
+                =
device->StateTable[STATE_PIXELSHADERCONSTANT].apply(STATE_PIXELSHADERCONS=
TANT, stateblock, context);=0A=
+            }=0A=
+        }=0A=
+        /* Exit now, don't set the bumpmat below, otherwise we may =
overwrite pixel shader constants */=0A=
+        return;=0A=
+    }=0A=
+=0A=
+    param[0] =3D *((float *) =
&stateblock->textureState[stage][WINED3DTSS_BUMPENVLSCALE]);=0A=
+    param[1] =3D *((float *) =
&stateblock->textureState[stage][WINED3DTSS_BUMPENVLOFFSET]);=0A=
+    param[2] =3D 0.0;=0A=
+    param[3] =3D 0.0;=0A=
+=0A=
+    GL_EXTCALL(glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, =
ARB_FFP_CONST_LUMINANCE(stage), param));=0A=
+    checkGLcall("glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, =
ARB_FFP_CONST_LUMINANCE(stage), param)");=0A=
+=0A=
+    if(device->shader_backend =3D=3D &arb_program_shader_backend) {=0A=
+        =
device->activeContext->pshader_const_dirty[ARB_FFP_CONST_LUMINANCE(stage)=
] =3D 1;=0A=
+        device->highest_dirty_ps_const =3D =
max(device->highest_dirty_ps_const, ARB_FFP_CONST_LUMINANCE(stage) + 1);=0A=
+    }=0A=
+}=0A=
+=0A=
 static const char *get_argreg(SHADER_BUFFER *buffer, DWORD argnum, =
unsigned int stage, DWORD arg) {=0A=
     const char *ret;=0A=
 =0A=
@@ -2578,6 +2612,7 @@ static GLuint gen_arbfp_ffp_shader(struct =
ffp_settings *settings, IWineD3DStateB=0A=
     SHADER_BUFFER buffer;=0A=
     BOOL tex_read[MAX_TEXTURES] =3D {FALSE, FALSE, FALSE, FALSE, FALSE, =
FALSE, FALSE, FALSE};=0A=
     BOOL bump_used[MAX_TEXTURES] =3D {FALSE, FALSE, FALSE, FALSE, =
FALSE, FALSE, FALSE, FALSE};=0A=
+    BOOL luminance_used[MAX_TEXTURES] =3D {FALSE, FALSE, FALSE, FALSE, =
FALSE, FALSE, FALSE, FALSE};=0A=
     const char *textype;=0A=
     const char *instr, *sat;=0A=
     char colorcor_dst[8];=0A=
@@ -2604,6 +2639,7 @@ static GLuint gen_arbfp_ffp_shader(struct =
ffp_settings *settings, IWineD3DStateB=0A=
         if(settings->op[stage].cop =3D=3D =
WINED3DTOP_BUMPENVMAPLUMINANCE) {=0A=
             bump_used[stage] =3D TRUE;=0A=
             tex_read[stage] =3D TRUE;=0A=
+            luminance_used[stage] =3D TRUE;=0A=
         }=0A=
 =0A=
         if(arg0 =3D=3D WINED3DTA_TFACTOR || arg1 =3D=3D =
WINED3DTA_TFACTOR || arg2 =3D=3D WINED3DTA_TFACTOR) {=0A=
@@ -2658,6 +2694,8 @@ static GLuint gen_arbfp_ffp_shader(struct =
ffp_settings *settings, IWineD3DStateB=0A=
         shader_addline(&buffer, "TEMP tex%u;\n", stage);=0A=
         if(!bump_used[stage]) continue;=0A=
         shader_addline(&buffer, "PARAM bumpmat%u =3D =
program.env[%u];\n", stage, ARB_FFP_CONST_BUMPMAT(stage));=0A=
+        if(!luminance_used[stage]) continue;=0A=
+        shader_addline(&buffer, "PARAM luminance%u =3D =
program.env[%u];\n", stage, ARB_FFP_CONST_LUMINANCE(stage));=0A=
     }=0A=
     if(tfactor_used) {=0A=
         shader_addline(&buffer, "PARAM tfactor =3D program.env[%u];\n", =
ARB_FFP_CONST_TFACTOR);=0A=
@@ -2715,6 +2753,11 @@ static GLuint gen_arbfp_ffp_shader(struct =
ffp_settings *settings, IWineD3DStateB=0A=
             shader_addline(&buffer, "ADD ret, ret, =
fragment.texcoord[%u];\n", stage);=0A=
             shader_addline(&buffer, "%s%s tex%u, ret, texture[%u], =
%s;\n",=0A=
                             instr, sat, stage, stage, textype);=0A=
+            if(settings->op[stage - 1].cop =3D=3D =
WINED3DTOP_BUMPENVMAPLUMINANCE) {=0A=
+                shader_addline(&buffer, "MAD ret.r, tex%u.b, =
luminance%u.r, luminance%u.g;\n",=0A=
+                               stage - 1, stage - 1, stage - 1);=0A=
+                shader_addline(&buffer, "MUL tex%u, tex%u, ret.r;\n", =
stage, stage);=0A=
+            }=0A=
         } else {=0A=
             shader_addline(&buffer, "%s%s tex%u, fragment.texcoord[%u], =
texture[%u], %s;\n",=0A=
                             instr, sat, stage, stage, stage, textype);=0A=
@@ -2896,6 +2939,8 @@ static const struct StateEntryTemplate =
arbfp_fragmentstate_template[] =3D {=0A=
     {STATE_TEXTURESTAGE(0, WINED3DTSS_BUMPENVMAT01),      { =
STATE_TEXTURESTAGE(0, WINED3DTSS_BUMPENVMAT00),     set_bumpmat_arbfp    =
   }, 0                               },=0A=
     {STATE_TEXTURESTAGE(0, WINED3DTSS_BUMPENVMAT10),      { =
STATE_TEXTURESTAGE(0, WINED3DTSS_BUMPENVMAT00),     set_bumpmat_arbfp    =
   }, 0                               },=0A=
     {STATE_TEXTURESTAGE(0, WINED3DTSS_BUMPENVMAT11),      { =
STATE_TEXTURESTAGE(0, WINED3DTSS_BUMPENVMAT00),     set_bumpmat_arbfp    =
   }, 0                               },=0A=
+    {STATE_TEXTURESTAGE(0, WINED3DTSS_BUMPENVLSCALE),     { =
STATE_TEXTURESTAGE(0, WINED3DTSS_BUMPENVLSCALE),    tex_bumpenvlum_arbfp =
   }, 0                               },=0A=
+    {STATE_TEXTURESTAGE(0, WINED3DTSS_BUMPENVLOFFSET),    { =
STATE_TEXTURESTAGE(0, WINED3DTSS_BUMPENVLSCALE),    tex_bumpenvlum_arbfp =
   }, 0                               },=0A=
     {STATE_TEXTURESTAGE(1, WINED3DTSS_COLOROP),           { =
STATE_PIXELSHADER,                                  fragment_prog_arbfp  =
   }, 0                               },=0A=
     {STATE_TEXTURESTAGE(1, WINED3DTSS_COLORARG1),         { =
STATE_PIXELSHADER,                                  fragment_prog_arbfp  =
   }, 0                               },=0A=
     {STATE_TEXTURESTAGE(1, WINED3DTSS_COLORARG2),         { =
STATE_PIXELSHADER,                                  fragment_prog_arbfp  =
   }, 0                               },=0A=
@@ -2909,6 +2954,8 @@ static const struct StateEntryTemplate =
arbfp_fragmentstate_template[] =3D {=0A=
     {STATE_TEXTURESTAGE(1, WINED3DTSS_BUMPENVMAT01),      { =
STATE_TEXTURESTAGE(1, WINED3DTSS_BUMPENVMAT00),     set_bumpmat_arbfp    =
   }, 0                               },=0A=
     {STATE_TEXTURESTAGE(1, WINED3DTSS_BUMPENVMAT10),      { =
STATE_TEXTURESTAGE(1, WINED3DTSS_BUMPENVMAT00),     set_bumpmat_arbfp    =
   }, 0                               },=0A=
     {STATE_TEXTURESTAGE(1, WINED3DTSS_BUMPENVMAT11),      { =
STATE_TEXTURESTAGE(1, WINED3DTSS_BUMPENVMAT00),     set_bumpmat_arbfp    =
   }, 0                               },=0A=
+    {STATE_TEXTURESTAGE(1, WINED3DTSS_BUMPENVLSCALE),     { =
STATE_TEXTURESTAGE(1, WINED3DTSS_BUMPENVLSCALE),    tex_bumpenvlum_arbfp =
   }, 0                               },=0A=
+    {STATE_TEXTURESTAGE(1, WINED3DTSS_BUMPENVLOFFSET),    { =
STATE_TEXTURESTAGE(1, WINED3DTSS_BUMPENVLSCALE),    tex_bumpenvlum_arbfp =
   }, 0                               },=0A=
     {STATE_TEXTURESTAGE(2, WINED3DTSS_COLOROP),           { =
STATE_PIXELSHADER,                                  fragment_prog_arbfp  =
   }, 0                               },=0A=
     {STATE_TEXTURESTAGE(2, WINED3DTSS_COLORARG1),         { =
STATE_PIXELSHADER,                                  fragment_prog_arbfp  =
   }, 0                               },=0A=
     {STATE_TEXTURESTAGE(2, WINED3DTSS_COLORARG2),         { =
STATE_PIXELSHADER,                                  fragment_prog_arbfp  =
   }, 0                               },=0A=
@@ -2922,6 +2969,8 @@ static const struct StateEntryTemplate =
arbfp_fragmentstate_template[] =3D {=0A=
     {STATE_TEXTURESTAGE(2, WINED3DTSS_BUMPENVMAT01),      { =
STATE_TEXTURESTAGE(2, WINED3DTSS_BUMPENVMAT00),     set_bumpmat_arbfp    =
   }, 0                               },=0A=
     {STATE_TEXTURESTAGE(2, WINED3DTSS_BUMPENVMAT10),      { =
STATE_TEXTURESTAGE(2, WINED3DTSS_BUMPENVMAT00),     set_bumpmat_arbfp    =
   }, 0                               },=0A=
     {STATE_TEXTURESTAGE(2, WINED3DTSS_BUMPENVMAT11),      { =
STATE_TEXTURESTAGE(2, WINED3DTSS_BUMPENVMAT00),     set_bumpmat_arbfp    =
   }, 0                               },=0A=
+    {STATE_TEXTURESTAGE(2, WINED3DTSS_BUMPENVLSCALE),     { =
STATE_TEXTURESTAGE(2, WINED3DTSS_BUMPENVLSCALE),    tex_bumpenvlum_arbfp =
   }, 0                               },=0A=
+    {STATE_TEXTURESTAGE(2, WINED3DTSS_BUMPENVLOFFSET),    { =
STATE_TEXTURESTAGE(2, WINED3DTSS_BUMPENVLSCALE),    tex_bumpenvlum_arbfp =
   }, 0                               },=0A=
     {STATE_TEXTURESTAGE(3, WINED3DTSS_COLOROP),           { =
STATE_PIXELSHADER,                                  fragment_prog_arbfp  =
   }, 0                               },=0A=
     {STATE_TEXTURESTAGE(3, WINED3DTSS_COLORARG1),         { =
STATE_PIXELSHADER,                                  fragment_prog_arbfp  =
   }, 0                               },=0A=
     {STATE_TEXTURESTAGE(3, WINED3DTSS_COLORARG2),         { =
STATE_PIXELSHADER,                                  fragment_prog_arbfp  =
   }, 0                               },=0A=
@@ -2935,6 +2984,8 @@ static const struct StateEntryTemplate =
arbfp_fragmentstate_template[] =3D {=0A=
     {STATE_TEXTURESTAGE(3, WINED3DTSS_BUMPENVMAT01),      { =
STATE_TEXTURESTAGE(3, WINED3DTSS_BUMPENVMAT00),     set_bumpmat_arbfp    =
   }, 0                               },=0A=
     {STATE_TEXTURESTAGE(3, WINED3DTSS_BUMPENVMAT10),      { =
STATE_TEXTURESTAGE(3, WINED3DTSS_BUMPENVMAT00),     set_bumpmat_arbfp    =
   }, 0                               },=0A=
     {STATE_TEXTURESTAGE(3, WINED3DTSS_BUMPENVMAT11),      { =
STATE_TEXTURESTAGE(3, WINED3DTSS_BUMPENVMAT00),     set_bumpmat_arbfp    =
   }, 0                               },=0A=
+    {STATE_TEXTURESTAGE(3, WINED3DTSS_BUMPENVLSCALE),     { =
STATE_TEXTURESTAGE(3, WINED3DTSS_BUMPENVLSCALE),    tex_bumpenvlum_arbfp =
   }, 0                               },=0A=
+    {STATE_TEXTURESTAGE(3, WINED3DTSS_BUMPENVLOFFSET),    { =
STATE_TEXTURESTAGE(3, WINED3DTSS_BUMPENVLSCALE),    tex_bumpenvlum_arbfp =
   }, 0                               },=0A=
     {STATE_TEXTURESTAGE(4, WINED3DTSS_COLOROP),           { =
STATE_PIXELSHADER,                                  fragment_prog_arbfp  =
   }, 0                               },=0A=
     {STATE_TEXTURESTAGE(4, WINED3DTSS_COLORARG1),         { =
STATE_PIXELSHADER,                                  fragment_prog_arbfp  =
   }, 0                               },=0A=
     {STATE_TEXTURESTAGE(4, WINED3DTSS_COLORARG2),         { =
STATE_PIXELSHADER,                                  fragment_prog_arbfp  =
   }, 0                               },=0A=
@@ -2948,6 +2999,8 @@ static const struct StateEntryTemplate =
arbfp_fragmentstate_template[] =3D {=0A=
     {STATE_TEXTURESTAGE(4, WINED3DTSS_BUMPENVMAT01),      { =
STATE_TEXTURESTAGE(4, WINED3DTSS_BUMPENVMAT00),     set_bumpmat_arbfp    =
   }, 0                               },=0A=
     {STATE_TEXTURESTAGE(4, WINED3DTSS_BUMPENVMAT10),      { =
STATE_TEXTURESTAGE(4, WINED3DTSS_BUMPENVMAT00),     set_bumpmat_arbfp    =
   }, 0                               },=0A=
     {STATE_TEXTURESTAGE(4, WINED3DTSS_BUMPENVMAT11),      { =
STATE_TEXTURESTAGE(4, WINED3DTSS_BUMPENVMAT00),     set_bumpmat_arbfp    =
   }, 0                               },=0A=
+    {STATE_TEXTURESTAGE(4, WINED3DTSS_BUMPENVLSCALE),     { =
STATE_TEXTURESTAGE(4, WINED3DTSS_BUMPENVLSCALE),    tex_bumpenvlum_arbfp =
   }, 0                               },=0A=
+    {STATE_TEXTURESTAGE(4, WINED3DTSS_BUMPENVLOFFSET),    { =
STATE_TEXTURESTAGE(4, WINED3DTSS_BUMPENVLSCALE),    tex_bumpenvlum_arbfp =
   }, 0                               },=0A=
     {STATE_TEXTURESTAGE(5, WINED3DTSS_COLOROP),           { =
STATE_PIXELSHADER,                                  fragment_prog_arbfp  =
   }, 0                               },=0A=
     {STATE_TEXTURESTAGE(5, WINED3DTSS_COLORARG1),         { =
STATE_PIXELSHADER,                                  fragment_prog_arbfp  =
   }, 0                               },=0A=
     {STATE_TEXTURESTAGE(5, WINED3DTSS_COLORARG2),         { =
STATE_PIXELSHADER,                                  fragment_prog_arbfp  =
   }, 0                               },=0A=
@@ -2961,6 +3014,8 @@ static const struct StateEntryTemplate =
arbfp_fragmentstate_template[] =3D {=0A=
     {STATE_TEXTURESTAGE(5, WINED3DTSS_BUMPENVMAT01),      { =
STATE_TEXTURESTAGE(5, WINED3DTSS_BUMPENVMAT00),     set_bumpmat_arbfp    =
   }, 0                               },=0A=
     {STATE_TEXTURESTAGE(5, WINED3DTSS_BUMPENVMAT10),      { =
STATE_TEXTURESTAGE(5, WINED3DTSS_BUMPENVMAT00),     set_bumpmat_arbfp    =
   }, 0                               },=0A=
     {STATE_TEXTURESTAGE(5, WINED3DTSS_BUMPENVMAT11),      { =
STATE_TEXTURESTAGE(5, WINED3DTSS_BUMPENVMAT00),     set_bumpmat_arbfp    =
   }, 0                               },=0A=
+    {STATE_TEXTURESTAGE(5, WINED3DTSS_BUMPENVLSCALE),     { =
STATE_TEXTURESTAGE(5, WINED3DTSS_BUMPENVLSCALE),    tex_bumpenvlum_arbfp =
   }, 0                               },=0A=
+    {STATE_TEXTURESTAGE(5, WINED3DTSS_BUMPENVLOFFSET),    { =
STATE_TEXTURESTAGE(5, WINED3DTSS_BUMPENVLSCALE),    tex_bumpenvlum_arbfp =
   }, 0                               },=0A=
     {STATE_TEXTURESTAGE(6, WINED3DTSS_COLOROP),           { =
STATE_PIXELSHADER,                                  fragment_prog_arbfp  =
   }, 0                               },=0A=
     {STATE_TEXTURESTAGE(6, WINED3DTSS_COLORARG1),         { =
STATE_PIXELSHADER,                                  fragment_prog_arbfp  =
   }, 0                               },=0A=
     {STATE_TEXTURESTAGE(6, WINED3DTSS_COLORARG2),         { =
STATE_PIXELSHADER,                                  fragment_prog_arbfp  =
   }, 0                               },=0A=
@@ -2974,6 +3029,8 @@ static const struct StateEntryTemplate =
arbfp_fragmentstate_template[] =3D {=0A=
     {STATE_TEXTURESTAGE(6, WINED3DTSS_BUMPENVMAT01),      { =
STATE_TEXTURESTAGE(6, WINED3DTSS_BUMPENVMAT00),     set_bumpmat_arbfp    =
   }, 0                               },=0A=
     {STATE_TEXTURESTAGE(6, WINED3DTSS_BUMPENVMAT10),      { =
STATE_TEXTURESTAGE(6, WINED3DTSS_BUMPENVMAT00),     set_bumpmat_arbfp    =
   }, 0                               },=0A=
     {STATE_TEXTURESTAGE(6, WINED3DTSS_BUMPENVMAT11),      { =
STATE_TEXTURESTAGE(6, WINED3DTSS_BUMPENVMAT00),     set_bumpmat_arbfp    =
   }, 0                               },=0A=
+    {STATE_TEXTURESTAGE(6, WINED3DTSS_BUMPENVLSCALE),     { =
STATE_TEXTURESTAGE(6, WINED3DTSS_BUMPENVLSCALE),    tex_bumpenvlum_arbfp =
   }, 0                               },=0A=
+    {STATE_TEXTURESTAGE(6, WINED3DTSS_BUMPENVLOFFSET),    { =
STATE_TEXTURESTAGE(6, WINED3DTSS_BUMPENVLSCALE),    tex_bumpenvlum_arbfp =
   }, 0                               },=0A=
     {STATE_TEXTURESTAGE(7, WINED3DTSS_COLOROP),           { =
STATE_PIXELSHADER,                                  fragment_prog_arbfp  =
   }, 0                               },=0A=
     {STATE_TEXTURESTAGE(7, WINED3DTSS_COLORARG1),         { =
STATE_PIXELSHADER,                                  fragment_prog_arbfp  =
   }, 0                               },=0A=
     {STATE_TEXTURESTAGE(7, WINED3DTSS_COLORARG2),         { =
STATE_PIXELSHADER,                                  fragment_prog_arbfp  =
   }, 0                               },=0A=
@@ -2987,6 +3044,8 @@ static const struct StateEntryTemplate =
arbfp_fragmentstate_template[] =3D {=0A=
     {STATE_TEXTURESTAGE(7, WINED3DTSS_BUMPENVMAT01),      { =
STATE_TEXTURESTAGE(7, WINED3DTSS_BUMPENVMAT00),     set_bumpmat_arbfp    =
   }, 0                               },=0A=
     {STATE_TEXTURESTAGE(7, WINED3DTSS_BUMPENVMAT10),      { =
STATE_TEXTURESTAGE(7, WINED3DTSS_BUMPENVMAT00),     set_bumpmat_arbfp    =
   }, 0                               },=0A=
     {STATE_TEXTURESTAGE(7, WINED3DTSS_BUMPENVMAT11),      { =
STATE_TEXTURESTAGE(7, WINED3DTSS_BUMPENVMAT00),     set_bumpmat_arbfp    =
   }, 0                               },=0A=
+    {STATE_TEXTURESTAGE(7, WINED3DTSS_BUMPENVLSCALE),     { =
STATE_TEXTURESTAGE(7, WINED3DTSS_BUMPENVLSCALE),    tex_bumpenvlum_arbfp =
   }, 0                               },=0A=
+    {STATE_TEXTURESTAGE(7, WINED3DTSS_BUMPENVLOFFSET),    { =
STATE_TEXTURESTAGE(7, WINED3DTSS_BUMPENVLSCALE),    tex_bumpenvlum_arbfp =
   }, 0                               },=0A=
     { STATE_SAMPLER(0),                                   { =
STATE_SAMPLER(0),                                   sampler_texdim       =
   }, 0                               },=0A=
     { STATE_SAMPLER(1),                                   { =
STATE_SAMPLER(1),                                   sampler_texdim       =
   }, 0                               },=0A=
     { STATE_SAMPLER(2),                                   { =
STATE_SAMPLER(2),                                   sampler_texdim       =
   }, 0                               },=0A=
-- =0A=
1.5.6.4=0A=
=0A=

------=_NextPart_000_0023_01C90695.B03CD400--




More information about the wine-patches mailing list