DXT1/3/5 support was broken, but unnoticeable since we also indicated
it wasn't supported.
diff --git a/dlls/d3d8/d3d8_main.c b/dlls/d3d8/d3d8_main.c
index b6a7bbc..b96ba0d 100644
--- a/dlls/d3d8/d3d8_main.c
+++ b/dlls/d3d8/d3d8_main.c
@@ -50,6 +50,7 @@
IDirect3D8Impl *object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirect3D8Impl));
object->lpVtbl = &Direct3D8_Vtbl;
+ object->direct3d8 = object;
object->ref = 1;
TRACE("SDKVersion = %x, Created Direct3D object at %p\n", SDKVersion, object);
diff --git a/dlls/d3d8/d3d8_private.h b/dlls/d3d8/d3d8_private.h
index 1dac871..2b06208 100644
--- a/dlls/d3d8/d3d8_private.h
+++ b/dlls/d3d8/d3d8_private.h
@@ -249,6 +249,7 @@
/* IDirect3D8 fields */
GL_Info gl_info;
+ IDirect3D8Impl *direct3d8;
};
/* IUnknown: */
diff --git a/dlls/d3d8/device.c b/dlls/d3d8/device.c
index 62bdb8c..bec7a83 100644
--- a/dlls/d3d8/device.c
+++ b/dlls/d3d8/device.c
@@ -2813,8 +2813,7 @@
/* If Alpha arg1 is texture then handle the special case when there changes between a
texture and no texture - See comments in set_tex_op */
if ((This->StateBlock->texture_state[Stage][D3DTSS_ALPHAARG1] == D3DTA_TEXTURE) &&
- ((oldTxt == NULL) && (pTexture != NULL)) ||
- ((pTexture == NULL) && (oldTxt != NULL)))
+ (((oldTxt == NULL) && (pTexture != NULL)) || ((pTexture == NULL) && (oldTxt != NULL))))
{
reapplyFlags |= REAPPLY_ALPHAOP;
}
@@ -3096,6 +3095,7 @@
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
glDisable(GL_TEXTURE_GEN_R);
+ checkGLcall("glDisable(GL_TEXTURE_GEN_S,T,R)");
break;
case D3DTSS_TCI_CAMERASPACEPOSITION:
diff --git a/dlls/d3d8/directx.c b/dlls/d3d8/directx.c
index c776442..46d8d74 100644
--- a/dlls/d3d8/directx.c
+++ b/dlls/d3d8/directx.c
@@ -320,6 +320,15 @@
RType, debug_d3dressourcetype(RType),
CheckFormat, debug_d3dformat(CheckFormat));
+ if (GL_SUPPORT(EXT_TEXTURE_COMPRESSION_S3TC)) {
+ switch (CheckFormat) {
+ case D3DFMT_DXT1:
+ case D3DFMT_DXT3:
+ case D3DFMT_DXT5:
+ return D3D_OK;
+ }
+ }
+
switch (CheckFormat) {
case D3DFMT_UYVY:
case D3DFMT_YUY2:
diff --git a/dlls/d3d8/utils.c b/dlls/d3d8/utils.c
index 35d979d..4727233 100644
--- a/dlls/d3d8/utils.c
+++ b/dlls/d3d8/utils.c
@@ -409,22 +409,8 @@
}
GLint D3DFmt2GLIntFmt(IDirect3DDevice8Impl* This, D3DFORMAT fmt) {
- GLint retVal;
+ GLint retVal = 0;
- switch (fmt) {
- case D3DFMT_P8: retVal = GL_COLOR_INDEX8_EXT; break;
- case D3DFMT_A8P8: retVal = GL_COLOR_INDEX8_EXT; break;
-
- case D3DFMT_A4R4G4B4: retVal = GL_RGBA4; break;
- case D3DFMT_A8R8G8B8: retVal = GL_RGBA8; break;
- case D3DFMT_X8R8G8B8: retVal = GL_RGB8; break;
- case D3DFMT_R8G8B8: retVal = GL_RGB8; break;
- case D3DFMT_R5G6B5: retVal = GL_RGB5; break; /* fixme: internal format 6 for g? */
- case D3DFMT_A1R5G5B5: retVal = GL_RGB5_A1; break;
- default:
- FIXME("Unhandled fmt(%u,%s)\n", fmt, debug_d3dformat(fmt));
- retVal = GL_RGB8;
- }
#if defined(GL_EXT_texture_compression_s3tc)
if (GL_SUPPORT(EXT_TEXTURE_COMPRESSION_S3TC)) {
switch (fmt) {
@@ -437,6 +423,22 @@
}
}
#endif
+ if (retVal == 0) {
+ switch (fmt) {
+ case D3DFMT_P8: retVal = GL_COLOR_INDEX8_EXT; break;
+ case D3DFMT_A8P8: retVal = GL_COLOR_INDEX8_EXT; break;
+
+ case D3DFMT_A4R4G4B4: retVal = GL_RGBA4; break;
+ case D3DFMT_A8R8G8B8: retVal = GL_RGBA8; break;
+ case D3DFMT_X8R8G8B8: retVal = GL_RGB8; break;
+ case D3DFMT_R8G8B8: retVal = GL_RGB8; break;
+ case D3DFMT_R5G6B5: retVal = GL_RGB5; break; /* fixme: internal format 6 for g? */
+ case D3DFMT_A1R5G5B5: retVal = GL_RGB5_A1; break;
+ default:
+ FIXME("Unhandled fmt(%u,%s)\n", fmt, debug_d3dformat(fmt));
+ retVal = GL_RGB8;
+ }
+ }
TRACE("fmt2glintFmt for fmt(%u,%s) = %x\n", fmt, debug_d3dformat(fmt), retVal);
return retVal;
}