Module: wine
Branch: master
Commit: 33482a732e11b514f567ce9d4750da7c89175205
URL: http://source.winehq.org/git/wine.git/?a=commit;h=33482a732e11b514f567ce9d4…
Author: Stefan Dösinger <stefan(a)codeweavers.com>
Date: Thu Nov 20 15:23:19 2008 +0100
wined3d: Enable blue = 1.0 fixup for D3DFMT_V8U8.
The dx7 sdk demos need this.
---
dlls/wined3d/arb_program_shader.c | 15 +++++++--------
dlls/wined3d/utils.c | 29 +++++++++--------------------
2 files changed, 16 insertions(+), 28 deletions(-)
diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c
index 3a52453..e8a6e96 100644
--- a/dlls/wined3d/arb_program_shader.c
+++ b/dlls/wined3d/arb_program_shader.c
@@ -601,14 +601,13 @@ static void gen_color_correction(SHADER_BUFFER *buffer, const char *reg, const c
case WINED3DFMT_V8U8:
case WINED3DFMT_V16U16:
if(GL_SUPPORT(NV_TEXTURE_SHADER) && fmt == WINED3DFMT_V8U8) {
- if(0) {
- /* The 3rd channel returns 1.0 in d3d, but 0.0 in gl. Fix this while we're at it :-)
- * disabled until an application that needs it is found because it causes unneeded
- * shader recompilation in some game
- */
- if(strlen(writemask) >= 4) {
- shader_addline(buffer, "MOV %s.%c, %s;\n", reg, writemask[3], one);
- }
+ /* The 3rd channel returns 1.0 in d3d, but 0.0 in gl. Fix this while we're at it :-)
+ * The dx7 sdk BumpEarth demo needs it because it uses BUMPENVMAPLUMINANCE with V8U8.
+ * With the luminance(b) value = 1.0, BUMPENVMAPLUMINANCE == BUMPENVMAP, but if b is
+ * 0.0(without this fixup), the rendering breaks.
+ */
+ if(strlen(writemask) >= 4) {
+ shader_addline(buffer, "MOV %s.%c, %s;\n", reg, writemask[3], one);
}
} else {
/* Correct the sign, but leave the blue as it is - it was loaded correctly already
diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c
index b49072f..f027404 100644
--- a/dlls/wined3d/utils.c
+++ b/dlls/wined3d/utils.c
@@ -365,28 +365,17 @@ BOOL initPixelFormats(WineD3D_GL_Info *gl_info)
/* V8U8 is supported natively by GL_ATI_envmap_bumpmap and GL_NV_texture_shader.
* V16U16 is only supported by GL_NV_texture_shader. The formats need fixup if
- * their extensions are not available.
+ * their extensions are not available. GL_ATI_envmap_bumpmap is not used because
+ * the only driver that implements it(fglrx) has a buggy implementation.
*
- * In theory, V8U8 and V16U16 need a fixup of the undefined blue channel. OpenGL
- * returns 0.0 when sampling from it, DirectX 1.0. This is disabled until we find
- * an application that needs this because it causes performance problems due to
- * shader recompiling in some games.
+ * V8U8 and V16U16 need a fixup of the undefined blue channel. OpenGL
+ * returns 0.0 when sampling from it, DirectX 1.0. So we always have in-shader
+ * conversion for this format.
*/
- if(!GL_SUPPORT(NV_TEXTURE_SHADER2)) {
- /* signed -> unsigned fixup */
- dst = getFmtIdx(WINED3DFMT_V8U8);
- gl_info->gl_formats[dst].conversion_group = WINED3DFMT_V8U8;
- dst = getFmtIdx(WINED3DFMT_V16U16);
- gl_info->gl_formats[dst].conversion_group = WINED3DFMT_V8U8;
- } else {
- /* Blue = 1.0 fixup, disabled for now */
- if(0) {
- dst = getFmtIdx(WINED3DFMT_V8U8);
- gl_info->gl_formats[dst].conversion_group = WINED3DFMT_V8U8;
- dst = getFmtIdx(WINED3DFMT_V16U16);
- gl_info->gl_formats[dst].conversion_group = WINED3DFMT_V8U8;
- }
- }
+ dst = getFmtIdx(WINED3DFMT_V8U8);
+ gl_info->gl_formats[dst].conversion_group = WINED3DFMT_V8U8;
+ dst = getFmtIdx(WINED3DFMT_V16U16);
+ gl_info->gl_formats[dst].conversion_group = WINED3DFMT_V8U8;
if(!GL_SUPPORT(NV_TEXTURE_SHADER)) {
/* If GL_NV_texture_shader is not supported, those formats are converted, incompatibly