[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