[PATCH] WineD3D: Sort out some limit confusion=0A=
Stefan Doesinger
stefan at codeweavers.com
Wed Aug 20 10:17:31 CDT 2008
=0A=
---=0A=
dlls/wined3d/arb_program_shader.c | 2 +-=0A=
dlls/wined3d/directx.c | 5 +++++=0A=
dlls/wined3d/drawprim.c | 6 +++---=0A=
dlls/wined3d/state.c | 12 +++---------=0A=
dlls/wined3d/utils.c | 2 +-=0A=
include/wine/wined3d_gl.h | 1 +=0A=
6 files changed, 14 insertions(+), 14 deletions(-)=0A=
=0A=
diff --git a/dlls/wined3d/arb_program_shader.c =
b/dlls/wined3d/arb_program_shader.c=0A=
index a701f36..fc13d0b 100644=0A=
--- a/dlls/wined3d/arb_program_shader.c=0A=
+++ b/dlls/wined3d/arb_program_shader.c=0A=
@@ -2819,7 +2819,7 @@ static void fragment_prog_arbfp(DWORD state, =
IWineD3DStateBlockImpl *stateblock,=0A=
return;=0A=
}=0A=
desc->num_textures_used =3D 0;=0A=
- for(i =3D 0; i < GL_LIMITS(texture_stages); i++) {=0A=
+ for(i =3D 0; i < min(MAX_TEXTURES, =
GL_LIMITS(fragment_samplers)); i++) {=0A=
if(settings.op[i].cop =3D=3D WINED3DTOP_DISABLE) break;=0A=
desc->num_textures_used =3D i;=0A=
}=0A=
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c=0A=
index 9741a7c..1b7de9e 100644=0A=
--- a/dlls/wined3d/directx.c=0A=
+++ b/dlls/wined3d/directx.c=0A=
@@ -704,6 +704,7 @@ BOOL IWineD3DImpl_FillGLCaps(WineD3D_GL_Info =
*gl_info) {=0A=
gl_info->max_buffers =3D 1;=0A=
gl_info->max_textures =3D 1;=0A=
gl_info->max_texture_stages =3D 1;=0A=
+ gl_info->max_texture_coords =3D 1;=0A=
gl_info->max_fragment_samplers =3D 1;=0A=
gl_info->max_vertex_samplers =3D 0;=0A=
gl_info->max_combined_samplers =3D 0;=0A=
@@ -866,6 +867,10 @@ BOOL IWineD3DImpl_FillGLCaps(WineD3D_GL_Info =
*gl_info) {=0A=
}=0A=
TRACE_(d3d_caps)("Max texture stages: %d\n", =
gl_info->max_texture_stages);=0A=
=0A=
+ glGetIntegerv(GL_MAX_TEXTURE_COORDS, &gl_max);=0A=
+ gl_info->max_texture_coords =3D min(MAX_TEXTURES, gl_max);=0A=
+ TRACE_(d3d_caps)("Max texture coords: %d\n", =
gl_info->max_texture_coords);=0A=
+=0A=
if (gl_info->supported[ARB_FRAGMENT_PROGRAM]) {=0A=
GLint tmp;=0A=
glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS_ARB, &tmp);=0A=
diff --git a/dlls/wined3d/drawprim.c b/dlls/wined3d/drawprim.c=0A=
index b0f6a53..7e2bc40 100644=0A=
--- a/dlls/wined3d/drawprim.c=0A=
+++ b/dlls/wined3d/drawprim.c=0A=
@@ -329,7 +329,7 @@ static void drawStridedSlow(IWineD3DDevice *iface, =
WineDirect3DVertexStridedData=0A=
/* Adding the stream offset once is cheaper than doing it every =
iteration. Do not modify the strided data, it is a pointer=0A=
* to the strided Data in the device and might be needed intact on =
the next draw=0A=
*/=0A=
- for (textureNo =3D 0; textureNo < GL_LIMITS(texture_stages); =
++textureNo) {=0A=
+ for (textureNo =3D 0; textureNo < GL_LIMITS(texture_coords); =
++textureNo) {=0A=
if(sd->u.s.texCoords[textureNo].lpData) {=0A=
texCoords[textureNo] =3D =
sd->u.s.texCoords[textureNo].lpData + =
streamOffset[sd->u.s.texCoords[textureNo].streamNo];=0A=
} else {=0A=
@@ -353,7 +353,7 @@ static void drawStridedSlow(IWineD3DDevice *iface, =
WineDirect3DVertexStridedData=0A=
* not using the vector functions here=0A=
*/=0A=
if(FIXME_ON(d3d_draw)) {=0A=
- for (textureNo =3D 0; textureNo < GL_LIMITS(textures); =
++textureNo) {=0A=
+ for (textureNo =3D 0; textureNo < GL_LIMITS(texture_coords); =
++textureNo) {=0A=
DWORD type =3D sd->u.s.texCoords[textureNo].dwType;=0A=
if (sd->u.s.texCoords[textureNo].lpData &&=0A=
type !=3D WINED3DDECLTYPE_FLOAT1 &&=0A=
@@ -420,7 +420,7 @@ static void drawStridedSlow(IWineD3DDevice *iface, =
WineDirect3DVertexStridedData=0A=
}=0A=
=0A=
/* Texture coords --------------------------- */=0A=
- for (textureNo =3D 0; textureNo < GL_LIMITS(texture_stages); =
++textureNo) {=0A=
+ for (textureNo =3D 0; textureNo < GL_LIMITS(texture_coords); =
++textureNo) {=0A=
=0A=
if (!GL_SUPPORT(ARB_MULTITEXTURE) && textureNo > 0) {=0A=
FIXME("Program using multiple concurrent textures which =
this opengl implementation doesn't support\n");=0A=
diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c=0A=
index 5b92420..8c987d6 100644=0A=
--- a/dlls/wined3d/state.c=0A=
+++ b/dlls/wined3d/state.c=0A=
@@ -3120,7 +3120,7 @@ static void transform_texture(DWORD state, =
IWineD3DStateBlockImpl *stateblock, W=0A=
if (mapped_stage =3D=3D -1) return;=0A=
=0A=
if (GL_SUPPORT(ARB_MULTITEXTURE)) {=0A=
- if(mapped_stage >=3D GL_LIMITS(textures)) {=0A=
+ if(mapped_stage >=3D GL_LIMITS(texture_coords)) {=0A=
return;=0A=
}=0A=
GL_EXTCALL(glActiveTextureARB(GL_TEXTURE0_ARB + mapped_stage));=0A=
@@ -3154,7 +3154,7 @@ static void transform_texture(DWORD state, =
IWineD3DStateBlockImpl *stateblock, W=0A=
static void unloadTexCoords(IWineD3DStateBlockImpl *stateblock) {=0A=
int texture_idx;=0A=
=0A=
- for (texture_idx =3D 0; texture_idx < GL_LIMITS(texture_stages); =
++texture_idx) {=0A=
+ for (texture_idx =3D 0; texture_idx < GL_LIMITS(texture_coords); =
++texture_idx) {=0A=
GL_EXTCALL(glClientActiveTextureARB(GL_TEXTURE0_ARB + =
texture_idx));=0A=
glDisableClientState(GL_TEXTURE_COORD_ARRAY);=0A=
}=0A=
@@ -3172,7 +3172,7 @@ static void loadTexCoords(IWineD3DStateBlockImpl =
*stateblock, WineDirect3DVertex=0A=
return;=0A=
}=0A=
=0A=
- for (textureNo =3D 0; textureNo < GL_LIMITS(texture_stages); =
++textureNo) {=0A=
+ for (textureNo =3D 0; textureNo < GL_LIMITS(texture_coords); =
++textureNo) {=0A=
int coordIdx =3D =
stateblock->textureState[textureNo][WINED3DTSS_TEXCOORDINDEX];=0A=
=0A=
mapped_stage =3D =
stateblock->wineD3DDevice->texUnitMap[textureNo];=0A=
@@ -3202,12 +3202,6 @@ static void loadTexCoords(IWineD3DStateBlockImpl =
*stateblock, WineDirect3DVertex=0A=
GL_EXTCALL(glMultiTexCoord4fARB(GL_TEXTURE0_ARB + =
mapped_stage, 0, 0, 0, 1));=0A=
}=0A=
}=0A=
- if (GL_SUPPORT(NV_REGISTER_COMBINERS)) {=0A=
- /* The number of the mapped stages increases monotonically, so =
it's fine to use the last used one */=0A=
- for (textureNo =3D mapped_stage + 1; textureNo < =
GL_LIMITS(textures); ++textureNo) {=0A=
- GL_EXTCALL(glMultiTexCoord4fARB(GL_TEXTURE0_ARB + =
textureNo, 0, 0, 0, 1));=0A=
- }=0A=
- }=0A=
}=0A=
=0A=
static void tex_coordindex(DWORD state, IWineD3DStateBlockImpl =
*stateblock, WineD3DContext *context) {=0A=
diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c=0A=
index 340c984..2f3e0b0 100644=0A=
--- a/dlls/wined3d/utils.c=0A=
+++ b/dlls/wined3d/utils.c=0A=
@@ -1811,7 +1811,7 @@ void gen_ffp_op(IWineD3DStateBlockImpl =
*stateblock, struct ffp_settings *setting=0A=
DWORD ttff;=0A=
DWORD cop, aop, carg0, carg1, carg2, aarg0, aarg1, aarg2;=0A=
=0A=
- for(i =3D 0; i < GL_LIMITS(texture_stages); i++) {=0A=
+ for(i =3D 0; i < MAX_TEXTURES; i++) {=0A=
IWineD3DBaseTextureImpl *texture;=0A=
settings->op[i].padding =3D 0;=0A=
if(stateblock->textureState[i][WINED3DTSS_COLOROP] =3D=3D =
WINED3DTOP_DISABLE) {=0A=
diff --git a/include/wine/wined3d_gl.h b/include/wine/wined3d_gl.h=0A=
index 4c26c9b..b269678 100644=0A=
--- a/include/wine/wined3d_gl.h=0A=
+++ b/include/wine/wined3d_gl.h=0A=
@@ -3842,6 +3842,7 @@ typedef struct _WineD3D_GL_Info {=0A=
UINT max_lights;=0A=
UINT max_textures;=0A=
UINT max_texture_stages;=0A=
+ UINT max_texture_coords;=0A=
UINT max_fragment_samplers;=0A=
UINT max_vertex_samplers;=0A=
UINT max_combined_samplers;=0A=
-- =0A=
1.5.6.4=0A=
=0A=
------=_NextPart_000_0004_01C9046F.75901E70--
More information about the wine-patches
mailing list