[PATCH] WineD3D: Set ffp caps in the ffp backend, not the =
Stefan Doesinger
stefan at codeweavers.com
Thu Jul 3 14:36:18 CDT 2008
shader backend=0A=
=0A=
---=0A=
dlls/wined3d/ati_fragment_shader.c | 96 =
++++++++++++++++++------------------=0A=
dlls/wined3d/baseshader.c | 68 -------------------------=0A=
dlls/wined3d/directx.c | 15 ++++--=0A=
dlls/wined3d/glsl_shader.c | 5 --=0A=
dlls/wined3d/state.c | 72 +++++++++++++++++++++++++++=0A=
dlls/wined3d/wined3d_private.h | 15 +++--=0A=
6 files changed, 140 insertions(+), 131 deletions(-)=0A=
=0A=
diff --git a/dlls/wined3d/ati_fragment_shader.c =
b/dlls/wined3d/ati_fragment_shader.c=0A=
index 10a56a3..e4420f1 100644=0A=
--- a/dlls/wined3d/ati_fragment_shader.c=0A=
+++ b/dlls/wined3d/ati_fragment_shader.c=0A=
@@ -972,8 +972,56 @@ static void atifs_enable(IWineD3DDevice *iface, =
BOOL enable) {=0A=
}=0A=
}=0A=
=0A=
+static void atifs_get_caps(WINED3DDEVTYPE devtype, WineD3D_GL_Info =
*gl_info, struct fragment_caps *caps) {=0A=
+ caps->TextureOpCaps =3D WINED3DTEXOPCAPS_DISABLE =
|=0A=
+ WINED3DTEXOPCAPS_SELECTARG1 =
|=0A=
+ WINED3DTEXOPCAPS_SELECTARG2 =
|=0A=
+ WINED3DTEXOPCAPS_MODULATE4X =
|=0A=
+ WINED3DTEXOPCAPS_MODULATE2X =
|=0A=
+ WINED3DTEXOPCAPS_MODULATE =
|=0A=
+ WINED3DTEXOPCAPS_ADDSIGNED2X =
|=0A=
+ WINED3DTEXOPCAPS_ADDSIGNED =
|=0A=
+ WINED3DTEXOPCAPS_ADD =
|=0A=
+ WINED3DTEXOPCAPS_SUBTRACT =
|=0A=
+ WINED3DTEXOPCAPS_ADDSMOOTH =
|=0A=
+ WINED3DTEXOPCAPS_BLENDCURRENTALPHA =
|=0A=
+ WINED3DTEXOPCAPS_BLENDFACTORALPHA =
|=0A=
+ WINED3DTEXOPCAPS_BLENDTEXTUREALPHA =
|=0A=
+ WINED3DTEXOPCAPS_BLENDDIFFUSEALPHA =
|=0A=
+ WINED3DTEXOPCAPS_BLENDTEXTUREALPHAPM =
|=0A=
+ WINED3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR =
|=0A=
+ WINED3DTEXOPCAPS_MODULATECOLOR_ADDALPHA =
|=0A=
+ WINED3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA =
|=0A=
+ WINED3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR =
|=0A=
+ WINED3DTEXOPCAPS_DOTPRODUCT3 =
|=0A=
+ WINED3DTEXOPCAPS_MULTIPLYADD =
|=0A=
+ WINED3DTEXOPCAPS_LERP =
|=0A=
+ WINED3DTEXOPCAPS_BUMPENVMAP;=0A=
+=0A=
+ /* TODO: Implement WINED3DTEXOPCAPS_BUMPENVMAPLUMINANCE=0A=
+ and WINED3DTEXOPCAPS_PREMODULATE */=0A=
+=0A=
+ /* GL_ATI_fragment_shader always supports 6 textures, which was the =
limit on r200 cards=0A=
+ * which this extension is exclusively focused on(later cards have =
GL_ARB_fragment_program).=0A=
+ * If the current card has more than 8 fixed function textures in =
OpenGL's regular fixed=0A=
+ * function pipeline then the ATI_fragment_shader backend imposes a =
stricter limit. This=0A=
+ * shouldn't be too hard since Nvidia cards have a limit of 4 =
textures with the default ffp=0A=
+ * pipeline, and almost all games are happy with that. We can =
however support up to 8=0A=
+ * texture stages because we have a 2nd pass limit of 8 =
instructions, and per stage we use=0A=
+ * only 1 instruction.=0A=
+ *=0A=
+ * The proper fix for this is not to use GL_ATI_fragment_shader on =
cards newer than the=0A=
+ * r200 series and use an ARB or GLSL shader instead=0A=
+ */=0A=
+ caps->MaxTextureBlendStages =3D 8;=0A=
+ caps->MaxSimultaneousTextures =3D 6;=0A=
+=0A=
+ caps->PrimitiveMiscCaps |=3D WINED3DPMISCCAPS_TSSARGTEMP;=0A=
+}=0A=
+=0A=
const struct fragment_pipeline atifs_fragment_pipeline =3D {=0A=
atifs_enable,=0A=
+ atifs_get_caps,=0A=
atifs_fragmentstate_template=0A=
};=0A=
=0A=
@@ -1055,54 +1103,6 @@ static BOOL =
shader_atifs_dirty_const(IWineD3DDevice *iface) {=0A=
=0A=
static void shader_atifs_get_caps(WINED3DDEVTYPE devtype, =
WineD3D_GL_Info *gl_info, struct shader_caps *caps) {=0A=
arb_program_shader_backend.shader_get_caps(devtype, gl_info, caps);=0A=
-=0A=
- caps->TextureOpCaps =3D WINED3DTEXOPCAPS_DISABLE =
|=0A=
- WINED3DTEXOPCAPS_SELECTARG1 =
|=0A=
- WINED3DTEXOPCAPS_SELECTARG2 =
|=0A=
- WINED3DTEXOPCAPS_MODULATE4X =
|=0A=
- WINED3DTEXOPCAPS_MODULATE2X =
|=0A=
- WINED3DTEXOPCAPS_MODULATE =
|=0A=
- WINED3DTEXOPCAPS_ADDSIGNED2X =
|=0A=
- WINED3DTEXOPCAPS_ADDSIGNED =
|=0A=
- WINED3DTEXOPCAPS_ADD =
|=0A=
- WINED3DTEXOPCAPS_SUBTRACT =
|=0A=
- WINED3DTEXOPCAPS_ADDSMOOTH =
|=0A=
- WINED3DTEXOPCAPS_BLENDCURRENTALPHA =
|=0A=
- WINED3DTEXOPCAPS_BLENDFACTORALPHA =
|=0A=
- WINED3DTEXOPCAPS_BLENDTEXTUREALPHA =
|=0A=
- WINED3DTEXOPCAPS_BLENDDIFFUSEALPHA =
|=0A=
- WINED3DTEXOPCAPS_BLENDTEXTUREALPHAPM =
|=0A=
- WINED3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR =
|=0A=
- WINED3DTEXOPCAPS_MODULATECOLOR_ADDALPHA =
|=0A=
- WINED3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA =
|=0A=
- WINED3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR =
|=0A=
- WINED3DTEXOPCAPS_DOTPRODUCT3 =
|=0A=
- WINED3DTEXOPCAPS_MULTIPLYADD =
|=0A=
- WINED3DTEXOPCAPS_LERP =
|=0A=
- WINED3DTEXOPCAPS_BUMPENVMAP;=0A=
-=0A=
- /* TODO: Implement WINED3DTEXOPCAPS_BUMPENVMAPLUMINANCE=0A=
- and WINED3DTEXOPCAPS_PREMODULATE */=0A=
-=0A=
- /* GL_ATI_fragment_shader only supports up to 6 textures, which was =
the limit on r200 cards=0A=
- * which this extension is exclusively focused on(later cards have =
GL_ARB_fragment_program).=0A=
- * If the current card has more than 8 fixed function textures in =
OpenGL's regular fixed=0A=
- * function pipeline then the ATI_fragment_shader backend imposes a =
stricter limit. This=0A=
- * shouldn't be too hard since Nvidia cards have a limit of 4 =
textures with the default ffp=0A=
- * pipeline, and almost all games are happy with that. We can =
however support up to 8=0A=
- * texture stages because we have a 2nd pass limit of 8 =
instructions, and per stage we use=0A=
- * only 1 instruction.=0A=
- *=0A=
- * The proper fix for this is not to use GL_ATI_fragment_shader on =
cards newer than the=0A=
- * r200 series and use an ARB or GLSL shader instead=0A=
- */=0A=
- if(caps->MaxSimultaneousTextures > 6) {=0A=
- WARN("OpenGL fixed function supports %d simultaneous =
textures,\n", caps->MaxSimultaneousTextures);=0A=
- WARN("but GL_ATI_fragment_shader limits this to 6\n");=0A=
- caps->MaxSimultaneousTextures =3D 6;=0A=
- }=0A=
-=0A=
- caps->PrimitiveMiscCaps |=3D WINED3DPMISCCAPS_TSSARGTEMP;=0A=
}=0A=
=0A=
static void shader_atifs_generate_pshader(IWineD3DPixelShader *iface, =
SHADER_BUFFER *buffer) {=0A=
diff --git a/dlls/wined3d/baseshader.c b/dlls/wined3d/baseshader.c=0A=
index a6231f2..57fbf62 100644=0A=
--- a/dlls/wined3d/baseshader.c=0A=
+++ b/dlls/wined3d/baseshader.c=0A=
@@ -1108,78 +1108,10 @@ static void =
shader_none_generate_vshader(IWineD3DVertexShader *iface, SHADER_BUF=0A=
=0A=
#define GLINFO_LOCATION (*gl_info)=0A=
static void shader_none_get_caps(WINED3DDEVTYPE devtype, =
WineD3D_GL_Info *gl_info, struct shader_caps *pCaps) {=0A=
- pCaps->TextureOpCaps =3D WINED3DTEXOPCAPS_ADD |=0A=
- WINED3DTEXOPCAPS_ADDSIGNED |=0A=
- WINED3DTEXOPCAPS_ADDSIGNED2X |=0A=
- WINED3DTEXOPCAPS_MODULATE |=0A=
- WINED3DTEXOPCAPS_MODULATE2X |=0A=
- WINED3DTEXOPCAPS_MODULATE4X |=0A=
- WINED3DTEXOPCAPS_SELECTARG1 |=0A=
- WINED3DTEXOPCAPS_SELECTARG2 |=0A=
- WINED3DTEXOPCAPS_DISABLE;=0A=
-=0A=
- if (GL_SUPPORT(ARB_TEXTURE_ENV_COMBINE) ||=0A=
- GL_SUPPORT(EXT_TEXTURE_ENV_COMBINE) ||=0A=
- GL_SUPPORT(NV_TEXTURE_ENV_COMBINE4)) {=0A=
- pCaps->TextureOpCaps |=3D WINED3DTEXOPCAPS_BLENDDIFFUSEALPHA |=0A=
- WINED3DTEXOPCAPS_BLENDTEXTUREALPHA |=0A=
- WINED3DTEXOPCAPS_BLENDFACTORALPHA |=0A=
- WINED3DTEXOPCAPS_BLENDCURRENTALPHA |=0A=
- WINED3DTEXOPCAPS_LERP |=0A=
- WINED3DTEXOPCAPS_SUBTRACT;=0A=
- }=0A=
- if (GL_SUPPORT(ATI_TEXTURE_ENV_COMBINE3) ||=0A=
- GL_SUPPORT(NV_TEXTURE_ENV_COMBINE4)) {=0A=
- pCaps->TextureOpCaps |=3D WINED3DTEXOPCAPS_ADDSMOOTH =
|=0A=
- WINED3DTEXOPCAPS_MULTIPLYADD =
|=0A=
- WINED3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR =
|=0A=
- WINED3DTEXOPCAPS_MODULATECOLOR_ADDALPHA =
|=0A=
- WINED3DTEXOPCAPS_BLENDTEXTUREALPHAPM;=0A=
- }=0A=
- if (GL_SUPPORT(ARB_TEXTURE_ENV_DOT3))=0A=
- pCaps->TextureOpCaps |=3D WINED3DTEXOPCAPS_DOTPRODUCT3;=0A=
-=0A=
- if (GL_SUPPORT(NV_REGISTER_COMBINERS)) {=0A=
- pCaps->TextureOpCaps |=3D =
WINED3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR |=0A=
- WINED3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA;=0A=
- }=0A=
-=0A=
- if(GL_SUPPORT(ATI_ENVMAP_BUMPMAP)) {=0A=
- pCaps->TextureOpCaps |=3D WINED3DTEXOPCAPS_BUMPENVMAP;=0A=
- } else if(GL_SUPPORT(NV_TEXTURE_SHADER2)) {=0A=
- /* Bump mapping is supported already in NV_TEXTURE_SHADER, but =
that extension does=0A=
- * not support 3D textures. This asks for trouble if an app =
uses both bump mapping=0A=
- * and 3D textures. It also allows us to keep the code simpler =
by having texture=0A=
- * shaders constantly enabled.=0A=
- */=0A=
- pCaps->TextureOpCaps |=3D WINED3DTEXOPCAPS_BUMPENVMAP;=0A=
- /* TODO: Luminance bump map? */=0A=
- }=0A=
-=0A=
-#if 0=0A=
- /* FIXME: Add=0A=
- pCaps->TextureOpCaps |=3D =
WINED3DTEXOPCAPS_BUMPENVMAPLUMINANCE=0A=
- WINED3DTEXOPCAPS_PREMODULATE */=0A=
-#endif=0A=
-=0A=
- pCaps->MaxTextureBlendStages =3D GL_LIMITS(texture_stages);=0A=
- pCaps->MaxSimultaneousTextures =3D GL_LIMITS(textures);=0A=
-=0A=
/* Set the shader caps to 0 for the none shader backend */=0A=
pCaps->VertexShaderVersion =3D 0;=0A=
pCaps->PixelShaderVersion =3D 0;=0A=
pCaps->PixelShader1xMaxValue =3D 0.0;=0A=
-=0A=
- if (GL_SUPPORT(NV_REGISTER_COMBINERS)) {=0A=
- pCaps->PrimitiveMiscCaps |=3D WINED3DPMISCCAPS_TSSARGTEMP;=0A=
- }=0A=
-=0A=
- /* The caps below can be supported but aren't handled yet in =
utils.c 'd3dta_to_combiner_input', disable them until support is fixed */=0A=
-#if 0=0A=
- if (GL_SUPPORT(NV_REGISTER_COMBINERS2))=0A=
- pCaps->PrimitiveMiscCaps |=3D WINED3DPMISCCAPS_PERSTAGECONSTANT;=0A=
-#endif=0A=
-=0A=
}=0A=
=0A=
#undef GLINFO_LOCATION=0A=
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c=0A=
index 1918a44..9992ee2 100644=0A=
--- a/dlls/wined3d/directx.c=0A=
+++ b/dlls/wined3d/directx.c=0A=
@@ -2913,7 +2913,9 @@ static HRESULT WINAPI =
IWineD3DImpl_GetDeviceCaps(IWineD3D *iface, UINT Adapter,=0A=
int vs_selected_mode;=0A=
int ps_selected_mode;=0A=
struct shader_caps shader_caps;=0A=
+ struct fragment_caps fragment_caps;=0A=
const shader_backend_t *shader_backend;=0A=
+ const struct fragment_pipeline *frag_pipeline =3D NULL;=0A=
=0A=
TRACE_(d3d_caps)("(%p)->(Adptr:%d, DevType: %x, pCaps: %p)\n", =
This, Adapter, DeviceType, pCaps);=0A=
=0A=
@@ -3272,8 +3274,12 @@ static HRESULT WINAPI =
IWineD3DImpl_GetDeviceCaps(IWineD3D *iface, UINT Adapter,=0A=
shader_backend =3D select_shader_backend(Adapter, DeviceType);=0A=
shader_backend->shader_get_caps(DeviceType, &GLINFO_LOCATION, =
&shader_caps);=0A=
=0A=
+ memset(&fragment_caps, 0, sizeof(fragment_caps));=0A=
+ frag_pipeline =3D select_fragment_implementation(Adapter, =
DeviceType);=0A=
+ frag_pipeline->get_caps(DeviceType, &GLINFO_LOCATION, =
&fragment_caps);=0A=
+=0A=
/* Add shader misc caps. Only some of them belong to the shader =
parts of the pipeline */=0A=
- pCaps->PrimitiveMiscCaps |=3D shader_caps.PrimitiveMiscCaps;=0A=
+ pCaps->PrimitiveMiscCaps |=3D fragment_caps.PrimitiveMiscCaps;=0A=
=0A=
/* This takes care for disabling vertex shader or pixel shader caps =
while leaving the other one enabled.=0A=
* Ignore shader model capabilities if disabled in config=0A=
@@ -3296,9 +3302,10 @@ static HRESULT WINAPI =
IWineD3DImpl_GetDeviceCaps(IWineD3D *iface, UINT Adapter,=0A=
pCaps->PixelShader1xMaxValue =3D =
shader_caps.PixelShader1xMaxValue;=0A=
}=0A=
=0A=
- pCaps->TextureOpCaps =3D =
shader_caps.TextureOpCaps;=0A=
- pCaps->MaxTextureBlendStages =3D =
shader_caps.MaxTextureBlendStages;=0A=
- pCaps->MaxSimultaneousTextures =3D =
shader_caps.MaxSimultaneousTextures;=0A=
+ pCaps->TextureOpCaps =3D =
fragment_caps.TextureOpCaps;=0A=
+ pCaps->MaxTextureBlendStages =3D =
fragment_caps.MaxTextureBlendStages;=0A=
+ pCaps->MaxSimultaneousTextures =3D =
fragment_caps.MaxSimultaneousTextures;=0A=
+=0A=
pCaps->VS20Caps =3D shader_caps.VS20Caps;=0A=
pCaps->MaxVShaderInstructionsExecuted =3D =
shader_caps.MaxVShaderInstructionsExecuted;=0A=
pCaps->MaxVertexShader30InstructionSlots=3D =
shader_caps.MaxVertexShader30InstructionSlots;=0A=
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c=0A=
index 100f349..da13d1d 100644=0A=
--- a/dlls/wined3d/glsl_shader.c=0A=
+++ b/dlls/wined3d/glsl_shader.c=0A=
@@ -3649,11 +3649,6 @@ static void =
shader_glsl_generate_vshader(IWineD3DVertexShader *iface, SHADER_BUF=0A=
}=0A=
=0A=
static void shader_glsl_get_caps(WINED3DDEVTYPE devtype, =
WineD3D_GL_Info *gl_info, struct shader_caps *pCaps) {=0A=
- /* We don't have a GLSL fixed function pipeline yet, so let the =
none backend set its caps,=0A=
- * then overwrite the shader specific ones=0A=
- */=0A=
- none_shader_backend.shader_get_caps(devtype, gl_info, pCaps);=0A=
-=0A=
/* Nvidia Geforce6/7 or Ati R4xx/R5xx cards with GLSL support, =
support VS 3.0 but older Nvidia/Ati=0A=
* models with GLSL support only support 2.0. In case of nvidia we =
can detect VS 2.0 support using=0A=
* vs_nv_version which is based on NV_vertex_program.=0A=
diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c=0A=
index 627a88f..0ea627c 100644=0A=
--- a/dlls/wined3d/state.c=0A=
+++ b/dlls/wined3d/state.c=0A=
@@ -4463,10 +4463,82 @@ static void nvts_enable(IWineD3DDevice *iface, =
BOOL enable) {=0A=
}=0A=
}=0A=
}=0A=
+=0A=
+static void ffp_fragment_get_caps(WINED3DDEVTYPE devtype, =
WineD3D_GL_Info *gl_info, struct fragment_caps *pCaps) {=0A=
+ pCaps->TextureOpCaps =3D WINED3DTEXOPCAPS_ADD |=0A=
+ WINED3DTEXOPCAPS_ADDSIGNED |=0A=
+ WINED3DTEXOPCAPS_ADDSIGNED2X |=0A=
+ WINED3DTEXOPCAPS_MODULATE |=0A=
+ WINED3DTEXOPCAPS_MODULATE2X |=0A=
+ WINED3DTEXOPCAPS_MODULATE4X |=0A=
+ WINED3DTEXOPCAPS_SELECTARG1 |=0A=
+ WINED3DTEXOPCAPS_SELECTARG2 |=0A=
+ WINED3DTEXOPCAPS_DISABLE;=0A=
+=0A=
+ if (GL_SUPPORT(ARB_TEXTURE_ENV_COMBINE) ||=0A=
+ GL_SUPPORT(EXT_TEXTURE_ENV_COMBINE) ||=0A=
+ GL_SUPPORT(NV_TEXTURE_ENV_COMBINE4)) {=0A=
+ pCaps->TextureOpCaps |=3D WINED3DTEXOPCAPS_BLENDDIFFUSEALPHA |=0A=
+ WINED3DTEXOPCAPS_BLENDTEXTUREALPHA |=0A=
+ WINED3DTEXOPCAPS_BLENDFACTORALPHA |=0A=
+ WINED3DTEXOPCAPS_BLENDCURRENTALPHA |=0A=
+ WINED3DTEXOPCAPS_LERP |=0A=
+ WINED3DTEXOPCAPS_SUBTRACT;=0A=
+ }=0A=
+ if (GL_SUPPORT(ATI_TEXTURE_ENV_COMBINE3) ||=0A=
+ GL_SUPPORT(NV_TEXTURE_ENV_COMBINE4)) {=0A=
+ pCaps->TextureOpCaps |=3D WINED3DTEXOPCAPS_ADDSMOOTH =
|=0A=
+ WINED3DTEXOPCAPS_MULTIPLYADD =
|=0A=
+ WINED3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR =
|=0A=
+ WINED3DTEXOPCAPS_MODULATECOLOR_ADDALPHA =
|=0A=
+ WINED3DTEXOPCAPS_BLENDTEXTUREALPHAPM;=0A=
+ }=0A=
+ if (GL_SUPPORT(ARB_TEXTURE_ENV_DOT3))=0A=
+ pCaps->TextureOpCaps |=3D WINED3DTEXOPCAPS_DOTPRODUCT3;=0A=
+=0A=
+ if (GL_SUPPORT(NV_REGISTER_COMBINERS)) {=0A=
+ pCaps->TextureOpCaps |=3D =
WINED3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR |=0A=
+ WINED3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA;=0A=
+ }=0A=
+=0A=
+ if(GL_SUPPORT(ATI_ENVMAP_BUMPMAP)) {=0A=
+ pCaps->TextureOpCaps |=3D WINED3DTEXOPCAPS_BUMPENVMAP;=0A=
+ } else if(GL_SUPPORT(NV_TEXTURE_SHADER2)) {=0A=
+ /* Bump mapping is supported already in NV_TEXTURE_SHADER, but =
that extension does=0A=
+ * not support 3D textures. This asks for trouble if an app =
uses both bump mapping=0A=
+ * and 3D textures. It also allows us to keep the code simpler =
by having texture=0A=
+ * shaders constantly enabled.=0A=
+ */=0A=
+ pCaps->TextureOpCaps |=3D WINED3DTEXOPCAPS_BUMPENVMAP;=0A=
+ /* TODO: Luminance bump map? */=0A=
+ }=0A=
+=0A=
+#if 0=0A=
+ /* FIXME: Add=0A=
+ pCaps->TextureOpCaps |=3D =
WINED3DTEXOPCAPS_BUMPENVMAPLUMINANCE=0A=
+ WINED3DTEXOPCAPS_PREMODULATE */=0A=
+#endif=0A=
+=0A=
+ pCaps->MaxTextureBlendStages =3D GL_LIMITS(texture_stages);=0A=
+ pCaps->MaxSimultaneousTextures =3D GL_LIMITS(textures);=0A=
+=0A=
+ if (GL_SUPPORT(NV_REGISTER_COMBINERS)) {=0A=
+ pCaps->PrimitiveMiscCaps |=3D WINED3DPMISCCAPS_TSSARGTEMP;=0A=
+ }=0A=
+=0A=
+ /* The caps below can be supported but aren't handled yet in =
utils.c 'd3dta_to_combiner_input', disable them until support is fixed */=0A=
+#if 0=0A=
+ if (GL_SUPPORT(NV_REGISTER_COMBINERS2))=0A=
+ pCaps->PrimitiveMiscCaps |=3D WINED3DPMISCCAPS_PERSTAGECONSTANT;=0A=
+#endif=0A=
+=0A=
+}=0A=
+=0A=
#undef GLINFO_LOCATION=0A=
=0A=
const struct fragment_pipeline ffp_fragment_pipeline =3D {=0A=
nvts_enable,=0A=
+ ffp_fragment_get_caps,=0A=
ffp_fragmentstate_template=0A=
};=0A=
=0A=
diff --git a/dlls/wined3d/wined3d_private.h =
b/dlls/wined3d/wined3d_private.h=0A=
index ec43fec..327a14f 100644=0A=
--- a/dlls/wined3d/wined3d_private.h=0A=
+++ b/dlls/wined3d/wined3d_private.h=0A=
@@ -218,12 +218,6 @@ typedef struct SHADER_BUFFER {=0A=
} SHADER_BUFFER;=0A=
=0A=
struct shader_caps {=0A=
- DWORD PrimitiveMiscCaps;=0A=
-=0A=
- DWORD TextureOpCaps;=0A=
- DWORD MaxTextureBlendStages;=0A=
- DWORD MaxSimultaneousTextures;=0A=
-=0A=
DWORD VertexShaderVersion;=0A=
DWORD MaxVertexShaderConst;=0A=
=0A=
@@ -546,8 +540,17 @@ struct StateEntryTemplate=0A=
struct StateEntry content;=0A=
};=0A=
=0A=
+struct fragment_caps {=0A=
+ DWORD PrimitiveMiscCaps;=0A=
+=0A=
+ DWORD TextureOpCaps;=0A=
+ DWORD MaxTextureBlendStages;=0A=
+ DWORD MaxSimultaneousTextures;=0A=
+};=0A=
+=0A=
struct fragment_pipeline {=0A=
void (*enable_extension)(IWineD3DDevice *iface, BOOL enable);=0A=
+ void (*get_caps)(WINED3DDEVTYPE devtype, WineD3D_GL_Info *gl_info, =
struct fragment_caps *caps);=0A=
const struct StateEntryTemplate *states;=0A=
};=0A=
=0A=
-- =0A=
1.5.4.5=0A=
=0A=
------=_NextPart_000_0017_01C8E2A2.9356D5A0--
More information about the wine-patches
mailing list