Wine-Devel
By thread
wine-devel@list.winehq.org
By month
Messages by month
- ----- 2026 -----
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
November 2019
- 85 participants
- 2191 messages
[PATCH 3/4] comctl32/combo: Force minimal item height.
by Nikolay Sivov
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
dlls/comctl32/combo.c | 111 +++++++++++++++++++++------------------
dlls/comctl32/comctl32.h | 4 +-
2 files changed, 63 insertions(+), 52 deletions(-)
diff --git a/dlls/comctl32/combo.c b/dlls/comctl32/combo.c
index a82118bc07..765fc631e0 100644
--- a/dlls/comctl32/combo.c
+++ b/dlls/comctl32/combo.c
@@ -78,6 +78,9 @@ static UINT CBitHeight, CBitWidth;
#define ID_CB_LISTBOX 1000
#define ID_CB_EDIT 1001
+static void CBCalcPlacement(HEADCOMBO *combo);
+static void CBResetPos(HEADCOMBO *combo);
+
/***********************************************************************
* COMBO_Init
*
@@ -169,6 +172,25 @@ static LRESULT COMBO_NCDestroy( HEADCOMBO *lphc )
return 0;
}
+static INT combo_get_text_height(const HEADCOMBO *combo)
+{
+ HDC hdc = GetDC(combo->self);
+ HFONT prev_font = 0;
+ TEXTMETRICW tm;
+
+ if (combo->hFont)
+ prev_font = SelectObject(hdc, combo->hFont);
+
+ GetTextMetricsW(hdc, &tm);
+
+ if (prev_font)
+ SelectObject(hdc, prev_font);
+
+ ReleaseDC(combo->self, hdc);
+
+ return tm.tmHeight + 4;
+}
+
/***********************************************************************
* CBGetTextAreaHeight
*
@@ -181,35 +203,18 @@ static LRESULT COMBO_NCDestroy( HEADCOMBO *lphc )
* This height was determined through experimentation.
* CBCalcPlacement will add 2*COMBO_YBORDERSIZE pixels for the border
*/
-static INT CBGetTextAreaHeight(HEADCOMBO *lphc)
+static INT CBGetTextAreaHeight(HEADCOMBO *lphc, BOOL clip_item_height)
{
- INT iTextItemHeight;
+ INT item_height, text_height;
- if( lphc->editHeight ) /* explicitly set height */
+ if (clip_item_height && !CB_OWNERDRAWN(lphc))
{
- iTextItemHeight = lphc->editHeight;
+ text_height = combo_get_text_height(lphc);
+ if (lphc->item_height < text_height)
+ lphc->item_height = text_height;
}
- else
- {
- TEXTMETRICW tm;
- HDC hDC = GetDC(lphc->self);
- HFONT hPrevFont = 0;
- INT baseUnitY;
-
- if (lphc->hFont)
- hPrevFont = SelectObject( hDC, lphc->hFont );
-
- GetTextMetricsW(hDC, &tm);
-
- baseUnitY = tm.tmHeight;
+ item_height = lphc->item_height;
- if( hPrevFont )
- SelectObject( hDC, hPrevFont );
-
- ReleaseDC(lphc->self, hDC);
-
- iTextItemHeight = baseUnitY + 4;
- }
/*
* Check the ownerdraw case if we haven't asked the parent the size
@@ -220,7 +225,7 @@ static INT CBGetTextAreaHeight(HEADCOMBO *lphc)
{
MEASUREITEMSTRUCT measureItem;
RECT clientRect;
- INT originalItemHeight = iTextItemHeight;
+ INT originalItemHeight = item_height;
UINT id = (UINT)GetWindowLongPtrW( lphc->self, GWLP_ID );
/*
@@ -237,10 +242,10 @@ static INT CBGetTextAreaHeight(HEADCOMBO *lphc)
measureItem.CtlID = id;
measureItem.itemID = -1;
measureItem.itemWidth = clientRect.right;
- measureItem.itemHeight = iTextItemHeight - 6; /* ownerdrawn cb is taller */
+ measureItem.itemHeight = item_height - 6; /* ownerdrawn cb is taller */
measureItem.itemData = 0;
SendMessageW(lphc->owner, WM_MEASUREITEM, id, (LPARAM)&measureItem);
- iTextItemHeight = 6 + measureItem.itemHeight;
+ item_height = 6 + measureItem.itemHeight;
/*
* Send a second one in the case of a fixed ownerdraw list to calculate the
@@ -261,10 +266,10 @@ static INT CBGetTextAreaHeight(HEADCOMBO *lphc)
/*
* Keep the size for the next time
*/
- lphc->editHeight = iTextItemHeight;
+ lphc->item_height = item_height;
}
- return iTextItemHeight;
+ return item_height;
}
/***********************************************************************
@@ -274,13 +279,12 @@ static INT CBGetTextAreaHeight(HEADCOMBO *lphc)
* a re-arranging of the contents of the combobox and the recalculation
* of the size of the "real" control window.
*/
-static void CBForceDummyResize(
- LPHEADCOMBO lphc)
+static void CBForceDummyResize(LPHEADCOMBO lphc)
{
RECT windowRect;
int newComboHeight;
- newComboHeight = CBGetTextAreaHeight(lphc) + 2*COMBO_YBORDERSIZE();
+ newComboHeight = CBGetTextAreaHeight(lphc, FALSE) + 2*COMBO_YBORDERSIZE();
GetWindowRect(lphc->self, &windowRect);
@@ -292,12 +296,17 @@ static void CBForceDummyResize(
* this will cancel-out in the processing of the WM_WINDOWPOSCHANGING
* message.
*/
+ lphc->wState |= CBF_NORESIZE;
SetWindowPos( lphc->self,
NULL,
0, 0,
windowRect.right - windowRect.left,
newComboHeight,
SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE );
+ lphc->wState &= ~CBF_NORESIZE;
+
+ CBCalcPlacement(lphc);
+ CBResetPos(lphc);
}
/***********************************************************************
@@ -314,7 +323,7 @@ static void CBCalcPlacement(HEADCOMBO *combo)
InflateRect(&combo->textRect, -COMBO_XBORDERSIZE(), -COMBO_YBORDERSIZE());
/* Chop off the bottom part to fit with the height of the text area. */
- combo->textRect.bottom = combo->textRect.top + CBGetTextAreaHeight(combo);
+ combo->textRect.bottom = combo->textRect.top + CBGetTextAreaHeight(combo, FALSE);
/* The button starts the same vertical position as the text area. */
combo->buttonRect = combo->textRect;
@@ -400,11 +409,9 @@ static LRESULT COMBO_Create( HWND hwnd, LPHEADCOMBO lphc, HWND hwndParent, LONG
lphc->owner = hwndParent;
- /*
- * The item height and dropped width are not set when the control
- * is created.
- */
- lphc->droppedWidth = lphc->editHeight = 0;
+ lphc->droppedWidth = 0;
+
+ lphc->item_height = combo_get_text_height(lphc);
/*
* The first time we go through, we want to measure the ownerdraw item
@@ -1381,8 +1388,11 @@ static void CBResetPos(HEADCOMBO *combo)
/***********************************************************************
* COMBO_Size
*/
-static void COMBO_Size( LPHEADCOMBO lphc )
+static void COMBO_Size( HEADCOMBO *lphc )
{
+ if (!lphc->hWndLBox || (lphc->wState & CBF_NORESIZE))
+ return;
+
/*
* Those controls are always the same height. So we have to make sure
* they are not resized to another value.
@@ -1395,7 +1405,7 @@ static void COMBO_Size( LPHEADCOMBO lphc )
GetWindowRect(lphc->self, &rc);
curComboHeight = rc.bottom - rc.top;
curComboWidth = rc.right - rc.left;
- newComboHeight = CBGetTextAreaHeight(lphc) + 2*COMBO_YBORDERSIZE();
+ newComboHeight = CBGetTextAreaHeight(lphc, TRUE) + 2*COMBO_YBORDERSIZE();
/*
* Resizing a combobox has another side effect, it resizes the dropped
@@ -1415,9 +1425,13 @@ static void COMBO_Size( LPHEADCOMBO lphc )
/*
* Restore original height
*/
- if( curComboHeight != newComboHeight )
- SetWindowPos(lphc->self, 0, 0, 0, curComboWidth, newComboHeight,
- SWP_NOZORDER|SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOREDRAW);
+ if (curComboHeight != newComboHeight)
+ {
+ lphc->wState |= CBF_NORESIZE;
+ SetWindowPos(lphc->self, 0, 0, 0, curComboWidth, newComboHeight,
+ SWP_NOZORDER | SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOREDRAW);
+ lphc->wState &= ~CBF_NORESIZE;
+ }
}
CBCalcPlacement(lphc);
@@ -1431,10 +1445,8 @@ static void COMBO_Size( LPHEADCOMBO lphc )
*/
static void COMBO_Font( LPHEADCOMBO lphc, HFONT hFont, BOOL bRedraw )
{
- /*
- * Set the font
- */
lphc->hFont = hFont;
+ lphc->item_height = combo_get_text_height(lphc);
/*
* Propagate to owned windows.
@@ -1470,7 +1482,7 @@ static LRESULT COMBO_SetItemHeight( LPHEADCOMBO lphc, INT index, INT height )
{
if( height < 32768 )
{
- lphc->editHeight = height + 2; /* Is the 2 for 2*EDIT_CONTROL_PADDING? */
+ lphc->item_height = height + 2; /* Is the 2 for 2*EDIT_CONTROL_PADDING? */
/*
* Redo the layout of the control.
@@ -1730,8 +1742,7 @@ static LRESULT CALLBACK COMBO_WindowProc( HWND hwnd, UINT message, WPARAM wParam
}
case WM_SIZE:
- if (lphc->hWndLBox && !(lphc->wState & CBF_NORESIZE))
- COMBO_Size( lphc );
+ COMBO_Size( lphc );
return TRUE;
case WM_SETFONT:
@@ -1942,7 +1953,7 @@ static LRESULT CALLBACK COMBO_WindowProc( HWND hwnd, UINT message, WPARAM wParam
case CB_GETITEMHEIGHT:
if ((INT)wParam >= 0) /* listbox item */
return SendMessageW(lphc->hWndLBox, LB_GETITEMHEIGHT, wParam, 0);
- return CBGetTextAreaHeight(lphc);
+ return CBGetTextAreaHeight(lphc, FALSE);
case CB_RESETCONTENT:
SendMessageW(lphc->hWndLBox, LB_RESETCONTENT, 0, 0);
diff --git a/dlls/comctl32/comctl32.h b/dlls/comctl32/comctl32.h
index f3e889c4bd..78e9798338 100644
--- a/dlls/comctl32/comctl32.h
+++ b/dlls/comctl32/comctl32.h
@@ -150,8 +150,8 @@ typedef struct
RECT droppedRect;
INT droppedIndex;
INT fixedOwnerDrawHeight;
- INT droppedWidth; /* last two are not used unless set */
- INT editHeight; /* explicitly */
+ INT droppedWidth; /* not used unless set explicitly */
+ INT item_height;
INT visibleItems;
} HEADCOMBO, *LPHEADCOMBO;
--
2.24.0
Nov. 28, 2019
[PATCH 2/4] comctl32/combo: Remove redundant argument from border painting helper.
by Nikolay Sivov
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
dlls/comctl32/combo.c | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/dlls/comctl32/combo.c b/dlls/comctl32/combo.c
index 827da37c0c..a82118bc07 100644
--- a/dlls/comctl32/combo.c
+++ b/dlls/comctl32/combo.c
@@ -736,16 +736,13 @@ static void CBPaintText(HEADCOMBO *lphc, HDC hdc_paint)
/***********************************************************************
* CBPaintBorder
*/
-static void CBPaintBorder(
- HWND hwnd,
- const HEADCOMBO *lphc,
- HDC hdc)
+static void CBPaintBorder(const HEADCOMBO *lphc, HDC hdc)
{
RECT clientRect;
if (CB_GETTYPE(lphc) != CBS_SIMPLE)
{
- GetClientRect(hwnd, &clientRect);
+ GetClientRect(lphc->self, &clientRect);
}
else
{
@@ -816,7 +813,7 @@ static LRESULT COMBO_Paint(HEADCOMBO *lphc, HDC hdc)
/*
* In non 3.1 look, there is a sunken border on the combobox
*/
- CBPaintBorder(lphc->self, lphc, hdc);
+ CBPaintBorder(lphc, hdc);
CBPaintButton(lphc, hdc);
--
2.24.0
Nov. 28, 2019
[PATCH 1/4] comctl32/combo: Remove unnecessary argument from button painting helper.
by Nikolay Sivov
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
dlls/comctl32/combo.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/dlls/comctl32/combo.c b/dlls/comctl32/combo.c
index 1fa5f5ef21..827da37c0c 100644
--- a/dlls/comctl32/combo.c
+++ b/dlls/comctl32/combo.c
@@ -545,10 +545,13 @@ static LRESULT COMBO_Create( HWND hwnd, LPHEADCOMBO lphc, HWND hwndParent, LONG
*
* Paint combo button (normal, pressed, and disabled states).
*/
-static void CBPaintButton( LPHEADCOMBO lphc, HDC hdc, RECT rectButton)
+static void CBPaintButton(HEADCOMBO *lphc, HDC hdc)
{
UINT buttonState = DFCS_SCROLLCOMBOBOX;
+ if (IsRectEmpty(&lphc->buttonRect))
+ return;
+
if( lphc->wState & CBF_NOREDRAW )
return;
@@ -559,7 +562,7 @@ static void CBPaintButton( LPHEADCOMBO lphc, HDC hdc, RECT rectButton)
if (CB_DISABLED(lphc))
buttonState |= DFCS_INACTIVE;
- DrawFrameControl(hdc, &rectButton, DFC_SCROLL, buttonState);
+ DrawFrameControl(hdc, &lphc->buttonRect, DFC_SCROLL, buttonState);
}
/***********************************************************************
@@ -815,8 +818,7 @@ static LRESULT COMBO_Paint(HEADCOMBO *lphc, HDC hdc)
*/
CBPaintBorder(lphc->self, lphc, hdc);
- if (!IsRectEmpty(&lphc->buttonRect))
- CBPaintButton(lphc, hdc, lphc->buttonRect);
+ CBPaintButton(lphc, hdc);
/* paint the edit control padding area */
if (CB_GETTYPE(lphc) != CBS_DROPDOWNLIST)
--
2.24.0
Nov. 28, 2019
[PATCH v2 6/6] wined3d: Store the blend factor in the stateblock as a render state.
by Zebediah Figura
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
---
dlls/d3d9/device.c | 33 +++++++-----------------
dlls/wined3d/stateblock.c | 47 ++++++++--------------------------
dlls/wined3d/wined3d.spec | 1 -
dlls/wined3d/wined3d_private.h | 3 +--
include/wine/wined3d.h | 4 +--
5 files changed, 21 insertions(+), 67 deletions(-)
diff --git a/dlls/d3d9/device.c b/dlls/d3d9/device.c
index 51b7f4d6f59..174cdc5bf49 100644
--- a/dlls/d3d9/device.c
+++ b/dlls/d3d9/device.c
@@ -2304,22 +2304,18 @@ static HRESULT WINAPI DECLSPEC_HOTPATCH d3d9_device_SetRenderState(IDirect3DDevi
TRACE("iface %p, state %#x, value %#x.\n", iface, state, value);
- if (state == D3DRS_BLENDFACTOR)
- {
- wined3d_color_from_d3dcolor(&factor, value);
- wined3d_mutex_lock();
- wined3d_stateblock_set_blend_factor(device->update_state, &factor);
- if (!device->recording)
- wined3d_device_set_blend_state(device->wined3d_device, NULL, &factor);
- wined3d_mutex_unlock();
-
- return D3D_OK;
- }
-
wined3d_mutex_lock();
wined3d_stateblock_set_render_state(device->update_state, state, value);
if (!device->recording)
- wined3d_device_set_render_state(device->wined3d_device, state, value);
+ {
+ if (state == D3DRS_BLENDFACTOR)
+ {
+ wined3d_color_from_d3dcolor(&factor, value);
+ wined3d_device_set_blend_state(device->wined3d_device, NULL, &factor);
+ }
+ else
+ wined3d_device_set_render_state(device->wined3d_device, state, value);
+ }
wined3d_mutex_unlock();
return D3D_OK;
@@ -2330,20 +2326,9 @@ static HRESULT WINAPI d3d9_device_GetRenderState(IDirect3DDevice9Ex *iface,
{
struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface);
const struct wined3d_stateblock_state *device_state;
- struct wined3d_color factor;
TRACE("iface %p, state %#x, value %p.\n", iface, state, value);
- if (state == D3DRS_BLENDFACTOR)
- {
- wined3d_mutex_lock();
- wined3d_device_get_blend_state(device->wined3d_device, &factor);
- wined3d_mutex_unlock();
- *value = D3DCOLOR_COLORVALUE(factor.r, factor.g, factor.b, factor.a);
-
- return D3D_OK;
- }
-
wined3d_mutex_lock();
device_state = wined3d_stateblock_get_state(device->state);
*value = device_state->rs[state];
diff --git a/dlls/wined3d/stateblock.c b/dlls/wined3d/stateblock.c
index 1196eb2a7f7..056fb7198b8 100644
--- a/dlls/wined3d/stateblock.c
+++ b/dlls/wined3d/stateblock.c
@@ -35,6 +35,7 @@ static const DWORD pixel_states_render[] =
WINED3D_RS_ALPHAREF,
WINED3D_RS_ALPHATESTENABLE,
WINED3D_RS_ANTIALIASEDLINEENABLE,
+ WINED3D_RS_BLENDFACTOR,
WINED3D_RS_BLENDOP,
WINED3D_RS_BLENDOPALPHA,
WINED3D_RS_BACK_STENCILFAIL,
@@ -208,7 +209,6 @@ static void stateblock_savedstates_set_all(struct wined3d_saved_states *states,
states->pixelShader = 1;
states->vertexShader = 1;
states->scissorRect = 1;
- states->blend_state = 1;
/* Fixed size arrays */
states->streamSource = 0xffff;
@@ -236,7 +236,6 @@ static void stateblock_savedstates_set_pixel(struct wined3d_saved_states *states
unsigned int i;
states->pixelShader = 1;
- states->blend_state = 1;
for (i = 0; i < ARRAY_SIZE(pixel_states_render); ++i)
{
@@ -903,15 +902,6 @@ void CDECL wined3d_stateblock_capture(struct wined3d_stateblock *stateblock,
stateblock->stateblock_state.scissor_rect = state->scissor_rect;
}
- if (stateblock->changed.blend_state
- && memcmp(&state->blend_factor, &stateblock->stateblock_state.blend_factor,
- sizeof(stateblock->stateblock_state.blend_factor)))
- {
- TRACE("Updating blend factor.\n");
-
- stateblock->stateblock_state.blend_factor = state->blend_factor;
- }
-
map = stateblock->changed.streamSource;
for (i = 0; map; map >>= 1, ++i)
{
@@ -1129,7 +1119,14 @@ void CDECL wined3d_stateblock_apply(const struct wined3d_stateblock *stateblock,
enum wined3d_render_state rs = stateblock->contained_render_states[i];
state->rs[rs] = stateblock->stateblock_state.rs[rs];
- wined3d_device_set_render_state(device, rs, stateblock->stateblock_state.rs[rs]);
+ if (rs == WINED3D_RS_BLENDFACTOR)
+ {
+ struct wined3d_color color;
+ wined3d_color_from_d3dcolor(&color, stateblock->stateblock_state.rs[rs]);
+ wined3d_device_set_blend_state(device, NULL, &color);
+ }
+ else
+ wined3d_device_set_render_state(device, rs, stateblock->stateblock_state.rs[rs]);
}
/* Texture states. */
@@ -1209,12 +1206,6 @@ void CDECL wined3d_stateblock_apply(const struct wined3d_stateblock *stateblock,
wined3d_device_set_scissor_rects(device, 1, &stateblock->stateblock_state.scissor_rect);
}
- if (stateblock->changed.blend_state)
- {
- state->blend_factor = stateblock->stateblock_state.blend_factor;
- wined3d_device_set_blend_state(device, NULL, &stateblock->stateblock_state.blend_factor);
- }
-
map = stateblock->changed.streamSource;
for (i = 0; map; map >>= 1, ++i)
{
@@ -1437,15 +1428,6 @@ void CDECL wined3d_stateblock_set_render_state(struct wined3d_stateblock *stateb
stateblock->changed.renderState[state >> 5] |= 1u << (state & 0x1f);
}
-void CDECL wined3d_stateblock_set_blend_factor(struct wined3d_stateblock *stateblock,
- const struct wined3d_color *blend_factor)
-{
- TRACE("stateblock %p, blend_factor %p.\n", stateblock, blend_factor);
-
- stateblock->stateblock_state.blend_factor = *blend_factor;
- stateblock->changed.blend_state = TRUE;
-}
-
void CDECL wined3d_stateblock_set_sampler_state(struct wined3d_stateblock *stateblock,
UINT sampler_idx, enum wined3d_sampler_state state, DWORD value)
{
@@ -1828,6 +1810,7 @@ static void init_default_render_states(DWORD rs[WINEHIGHEST_RENDER_STATE + 1], c
rs[WINED3D_RS_COLORWRITEENABLE1] = 0x0000000f;
rs[WINED3D_RS_COLORWRITEENABLE2] = 0x0000000f;
rs[WINED3D_RS_COLORWRITEENABLE3] = 0x0000000f;
+ rs[WINED3D_RS_BLENDFACTOR] = 0xffffffff;
rs[WINED3D_RS_SRGBWRITEENABLE] = 0;
rs[WINED3D_RS_DEPTHBIAS] = 0;
rs[WINED3D_RS_WRAP8] = 0;
@@ -1921,11 +1904,6 @@ static void state_init_default(struct wined3d_state *state, const struct wined3d
init_default_sampler_states(state->sampler_states);
- state->blend_factor.r = 1.0f;
- state->blend_factor.g = 1.0f;
- state->blend_factor.b = 1.0f;
- state->blend_factor.a = 1.0f;
-
for (i = 0; i < WINED3D_MAX_STREAMS; ++i)
state->streams[i].frequency = 1;
}
@@ -1972,11 +1950,6 @@ static void stateblock_state_init_default(struct wined3d_stateblock_state *state
init_default_sampler_states(state->sampler_states);
- state->blend_factor.r = 1.0f;
- state->blend_factor.g = 1.0f;
- state->blend_factor.b = 1.0f;
- state->blend_factor.a = 1.0f;
-
for (i = 0; i < WINED3D_MAX_STREAMS; ++i)
state->streams[i].frequency = 1;
}
diff --git a/dlls/wined3d/wined3d.spec b/dlls/wined3d/wined3d.spec
index bec84b5979c..716b902f313 100644
--- a/dlls/wined3d/wined3d.spec
+++ b/dlls/wined3d/wined3d.spec
@@ -264,7 +264,6 @@
@ cdecl wined3d_stateblock_init_contained_states(ptr)
@ cdecl wined3d_stateblock_reset(ptr)
@ cdecl wined3d_stateblock_set_base_vertex_index(ptr long)
-@ cdecl wined3d_stateblock_set_blend_factor(ptr ptr)
@ cdecl wined3d_stateblock_set_clip_plane(ptr long ptr)
@ cdecl wined3d_stateblock_set_index_buffer(ptr ptr long)
@ cdecl wined3d_stateblock_set_light(ptr long ptr)
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 4bc2ee19113..d79cfbc69dc 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -3863,9 +3863,8 @@ struct wined3d_saved_states
DWORD pixelShader : 1;
DWORD vertexShader : 1;
DWORD scissorRect : 1;
- DWORD blend_state : 1;
DWORD store_stream_offset : 1;
- DWORD padding : 3;
+ DWORD padding : 4;
};
struct StageState {
diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h
index c5ada12d66f..387a65e84c2 100644
--- a/include/wine/wined3d.h
+++ b/include/wine/wined3d.h
@@ -384,6 +384,7 @@ enum wined3d_render_state
WINED3D_RS_COLORWRITEENABLE1 = 190,
WINED3D_RS_COLORWRITEENABLE2 = 191,
WINED3D_RS_COLORWRITEENABLE3 = 192,
+ WINED3D_RS_BLENDFACTOR = 193,
WINED3D_RS_SRGBWRITEENABLE = 194,
WINED3D_RS_DEPTHBIAS = 195,
WINED3D_RS_WRAP8 = 198,
@@ -2162,7 +2163,6 @@ struct wined3d_stateblock_state
BOOL ps_consts_b[WINED3D_MAX_CONSTS_B];
DWORD rs[WINEHIGHEST_RENDER_STATE + 1];
- struct wined3d_color blend_factor;
struct wined3d_texture *textures[WINED3D_MAX_COMBINED_SAMPLERS];
DWORD sampler_states[WINED3D_MAX_COMBINED_SAMPLERS][WINED3D_HIGHEST_SAMPLER_STATE + 1];
@@ -2737,8 +2737,6 @@ ULONG __cdecl wined3d_stateblock_incref(struct wined3d_stateblock *stateblock);
void __cdecl wined3d_stateblock_init_contained_states(struct wined3d_stateblock *stateblock);
void __cdecl wined3d_stateblock_reset(struct wined3d_stateblock *stateblock);
void __cdecl wined3d_stateblock_set_base_vertex_index(struct wined3d_stateblock *stateblock, INT base_index);
-void __cdecl wined3d_stateblock_set_blend_factor(struct wined3d_stateblock *stateblock,
- const struct wined3d_color *blend_factor);
HRESULT __cdecl wined3d_stateblock_set_clip_plane(struct wined3d_stateblock *stateblock,
UINT plane_idx, const struct wined3d_vec4 *plane);
void __cdecl wined3d_stateblock_set_index_buffer(struct wined3d_stateblock *stateblock,
--
2.23.0
Nov. 28, 2019
[PATCH v2 5/6] ddraw: Retrieve render state from the primary stateblock.
by Zebediah Figura
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
---
dlls/ddraw/device.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/dlls/ddraw/device.c b/dlls/ddraw/device.c
index def3e7c2a43..d4dd74f8ae3 100644
--- a/dlls/ddraw/device.c
+++ b/dlls/ddraw/device.c
@@ -2289,6 +2289,7 @@ static HRESULT d3d_device7_GetRenderState(IDirect3DDevice7 *iface,
D3DRENDERSTATETYPE state, DWORD *value)
{
struct d3d_device *device = impl_from_IDirect3DDevice7(iface);
+ const struct wined3d_stateblock_state *device_state;
HRESULT hr = D3D_OK;
TRACE("iface %p, state %#x, value %p.\n", iface, state, value);
@@ -2297,6 +2298,7 @@ static HRESULT d3d_device7_GetRenderState(IDirect3DDevice7 *iface,
return DDERR_INVALIDPARAMS;
wined3d_mutex_lock();
+ device_state = wined3d_stateblock_get_state(device->state);
switch (state)
{
case D3DRENDERSTATE_TEXTUREMAG:
@@ -2392,7 +2394,7 @@ static HRESULT d3d_device7_GetRenderState(IDirect3DDevice7 *iface,
break;
case D3DRENDERSTATE_ZBIAS:
- *value = wined3d_device_get_render_state(device->wined3d_device, WINED3D_RS_DEPTHBIAS);
+ *value = device_state->rs[WINED3D_RS_DEPTHBIAS];
break;
default:
@@ -2403,7 +2405,7 @@ static HRESULT d3d_device7_GetRenderState(IDirect3DDevice7 *iface,
hr = E_NOTIMPL;
break;
}
- *value = wined3d_device_get_render_state(device->wined3d_device, state);
+ *value = device_state->rs[state];
}
wined3d_mutex_unlock();
--
2.23.0
Nov. 28, 2019
[PATCH v2 4/6] d3d8: Use wined3d_stateblock_get_state() in d3d8_device_GetRenderState().
by Zebediah Figura
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
---
dlls/d3d8/device.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/dlls/d3d8/device.c b/dlls/d3d8/device.c
index 89cdb4e14b0..62c75baae06 100644
--- a/dlls/d3d8/device.c
+++ b/dlls/d3d8/device.c
@@ -1875,18 +1875,20 @@ static HRESULT WINAPI d3d8_device_GetRenderState(IDirect3DDevice8 *iface,
D3DRENDERSTATETYPE state, DWORD *value)
{
struct d3d8_device *device = impl_from_IDirect3DDevice8(iface);
+ const struct wined3d_stateblock_state *device_state;
TRACE("iface %p, state %#x, value %p.\n", iface, state, value);
wined3d_mutex_lock();
+ device_state = wined3d_stateblock_get_state(device->state);
switch (state)
{
case D3DRS_ZBIAS:
- *value = wined3d_device_get_render_state(device->wined3d_device, WINED3D_RS_DEPTHBIAS);
+ *value = device_state->rs[WINED3D_RS_DEPTHBIAS];
break;
default:
- *value = wined3d_device_get_render_state(device->wined3d_device, state);
+ *value = device_state->rs[state];
}
wined3d_mutex_unlock();
--
2.23.0
Nov. 28, 2019
[PATCH v2 3/6] d3d9: Use wined3d_stateblock_get_state() in d3d9_device_GetRenderState().
by Zebediah Figura
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
---
dlls/d3d9/device.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/dlls/d3d9/device.c b/dlls/d3d9/device.c
index 2d66c569938..51b7f4d6f59 100644
--- a/dlls/d3d9/device.c
+++ b/dlls/d3d9/device.c
@@ -2329,6 +2329,7 @@ static HRESULT WINAPI d3d9_device_GetRenderState(IDirect3DDevice9Ex *iface,
D3DRENDERSTATETYPE state, DWORD *value)
{
struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface);
+ const struct wined3d_stateblock_state *device_state;
struct wined3d_color factor;
TRACE("iface %p, state %#x, value %p.\n", iface, state, value);
@@ -2344,7 +2345,8 @@ static HRESULT WINAPI d3d9_device_GetRenderState(IDirect3DDevice9Ex *iface,
}
wined3d_mutex_lock();
- *value = wined3d_device_get_render_state(device->wined3d_device, state);
+ device_state = wined3d_stateblock_get_state(device->state);
+ *value = device_state->rs[state];
wined3d_mutex_unlock();
return D3D_OK;
--
2.23.0
Nov. 28, 2019
[PATCH v2 2/6] wined3d: Introduce wined3d_stateblock_get_state().
by Zebediah Figura
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
---
dlls/wined3d/stateblock.c | 5 +++
dlls/wined3d/wined3d.spec | 1 +
dlls/wined3d/wined3d_private.h | 66 ---------------------------------
include/wine/wined3d.h | 67 ++++++++++++++++++++++++++++++++++
4 files changed, 73 insertions(+), 66 deletions(-)
diff --git a/dlls/wined3d/stateblock.c b/dlls/wined3d/stateblock.c
index 1c3704c10a5..1196eb2a7f7 100644
--- a/dlls/wined3d/stateblock.c
+++ b/dlls/wined3d/stateblock.c
@@ -1699,6 +1699,11 @@ HRESULT CDECL wined3d_stateblock_set_light_enable(struct wined3d_stateblock *sta
return S_OK;
}
+const struct wined3d_stateblock_state * CDECL wined3d_stateblock_get_state(const struct wined3d_stateblock *stateblock)
+{
+ return &stateblock->stateblock_state;
+}
+
static void init_default_render_states(DWORD rs[WINEHIGHEST_RENDER_STATE + 1], const struct wined3d_d3d_info *d3d_info)
{
union
diff --git a/dlls/wined3d/wined3d.spec b/dlls/wined3d/wined3d.spec
index fed5ce1b128..bec84b5979c 100644
--- a/dlls/wined3d/wined3d.spec
+++ b/dlls/wined3d/wined3d.spec
@@ -259,6 +259,7 @@
@ cdecl wined3d_stateblock_capture(ptr ptr)
@ cdecl wined3d_stateblock_create(ptr ptr long ptr)
@ cdecl wined3d_stateblock_decref(ptr)
+@ cdecl wined3d_stateblock_get_state(ptr)
@ cdecl wined3d_stateblock_incref(ptr)
@ cdecl wined3d_stateblock_init_contained_states(ptr)
@ cdecl wined3d_stateblock_reset(ptr)
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 3ae7dab858e..4bc2ee19113 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -272,14 +272,7 @@ static inline enum complex_fixup get_complex_fixup(struct color_fixup_desc fixup
}
/* Device caps */
-#define WINED3D_MAX_STREAMS 16
-#define WINED3D_MAX_TEXTURES 8
-#define WINED3D_MAX_FRAGMENT_SAMPLERS 16
-#define WINED3D_MAX_VERTEX_SAMPLERS 4
-#define WINED3D_MAX_COMBINED_SAMPLERS (WINED3D_MAX_FRAGMENT_SAMPLERS + WINED3D_MAX_VERTEX_SAMPLERS)
-#define WINED3D_MAX_ACTIVE_LIGHTS 8
#define WINED3D_MAX_SOFTWARE_ACTIVE_LIGHTS 32
-#define WINED3D_MAX_CLIP_DISTANCES 8
#define MAX_CONSTANT_BUFFERS 15
#define MAX_SAMPLER_OBJECTS 16
#define MAX_SHADER_RESOURCE_VIEWS 128
@@ -699,10 +692,6 @@ enum wined3d_shader_conditional_op
#define MAX_REG_INPUT 32
#define MAX_REG_OUTPUT 32
#define WINED3D_MAX_CBS 15
-#define WINED3D_MAX_CONSTS_B 16
-#define WINED3D_MAX_CONSTS_I 16
-#define WINED3D_MAX_VS_CONSTS_F 256
-#define WINED3D_MAX_PS_CONSTS_F 224
/* FIXME: This needs to go up to 2048 for
* Shader model 3 according to msdn (and for software shaders) */
@@ -1504,8 +1493,6 @@ static inline void wined3d_colour_srgb_from_linear(struct wined3d_color *colour_
colour_srgb->a = colour->a;
}
-#define WINED3D_HIGHEST_TRANSFORM_STATE WINED3D_TS_WORLD_MATRIX(255) /* Highest value in wined3d_transform_state. */
-
void wined3d_check_gl_call(const struct wined3d_gl_info *gl_info,
const char *file, unsigned int line, const char *name) DECLSPEC_HIDDEN;
@@ -3121,25 +3108,6 @@ struct wined3d_stream_output
UINT offset;
};
-struct wined3d_stream_state
-{
- struct wined3d_buffer *buffer;
- UINT offset;
- UINT stride;
- UINT frequency;
- UINT flags;
-};
-
-#define LIGHTMAP_SIZE 43
-#define LIGHTMAP_HASHFUNC(x) ((x) % LIGHTMAP_SIZE)
-
-struct wined3d_light_state
-{
- /* Light hashmap. Collisions are handled using linked lists. */
- struct list light_map[LIGHTMAP_SIZE];
- const struct wined3d_light_info *lights[WINED3D_MAX_ACTIVE_LIGHTS];
-};
-
#define WINED3D_STATE_NO_REF 0x00000001
#define WINED3D_STATE_INIT_DEFAULT 0x00000002
@@ -3216,40 +3184,6 @@ struct wined3d_dummy_textures
* wined3d_device_create() ignores it. */
#define WINED3DCREATE_MULTITHREADED 0x00000004
-struct wined3d_stateblock_state
-{
- struct wined3d_vertex_declaration *vertex_declaration;
- struct wined3d_stream_state streams[WINED3D_MAX_STREAMS + 1];
- struct wined3d_buffer *index_buffer;
- enum wined3d_format_id index_format;
- int base_vertex_index;
-
- struct wined3d_shader *vs;
- struct wined3d_vec4 vs_consts_f[WINED3D_MAX_VS_CONSTS_F];
- struct wined3d_ivec4 vs_consts_i[WINED3D_MAX_CONSTS_I];
- BOOL vs_consts_b[WINED3D_MAX_CONSTS_B];
-
- struct wined3d_shader *ps;
- struct wined3d_vec4 ps_consts_f[WINED3D_MAX_PS_CONSTS_F];
- struct wined3d_ivec4 ps_consts_i[WINED3D_MAX_CONSTS_I];
- BOOL ps_consts_b[WINED3D_MAX_CONSTS_B];
-
- DWORD rs[WINEHIGHEST_RENDER_STATE + 1];
- struct wined3d_color blend_factor;
-
- struct wined3d_texture *textures[WINED3D_MAX_COMBINED_SAMPLERS];
- DWORD sampler_states[WINED3D_MAX_COMBINED_SAMPLERS][WINED3D_HIGHEST_SAMPLER_STATE + 1];
- DWORD texture_states[WINED3D_MAX_TEXTURES][WINED3D_HIGHEST_TEXTURE_STATE + 1];
-
- struct wined3d_matrix transforms[WINED3D_HIGHEST_TRANSFORM_STATE + 1];
- struct wined3d_vec4 clip_planes[WINED3D_MAX_CLIP_DISTANCES];
- struct wined3d_material material;
- struct wined3d_viewport viewport;
- RECT scissor_rect;
-
- struct wined3d_light_state light_state;
-};
-
struct wined3d_device
{
LONG ref;
diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h
index eba14e9a022..c5ada12d66f 100644
--- a/include/wine/wined3d.h
+++ b/include/wine/wined3d.h
@@ -668,6 +668,7 @@ enum wined3d_transform_state
};
#define WINED3D_TS_WORLD_MATRIX(index) (enum wined3d_transform_state)(index + 256)
+#define WINED3D_HIGHEST_TRANSFORM_STATE WINED3D_TS_WORLD_MATRIX(255) /* Highest value in wined3d_transform_state. */
enum wined3d_basis_type
{
@@ -1588,6 +1589,18 @@ enum wined3d_shader_type
#define WINED3D_REGISTER_WINDOW_NO_ALT_ENTER 0x00000002u
#define WINED3D_REGISTER_WINDOW_NO_PRINT_SCREEN 0x00000004u
+#define WINED3D_MAX_STREAMS 16
+#define WINED3D_MAX_TEXTURES 8
+#define WINED3D_MAX_FRAGMENT_SAMPLERS 16
+#define WINED3D_MAX_VERTEX_SAMPLERS 4
+#define WINED3D_MAX_COMBINED_SAMPLERS (WINED3D_MAX_FRAGMENT_SAMPLERS + WINED3D_MAX_VERTEX_SAMPLERS)
+#define WINED3D_MAX_CLIP_DISTANCES 8
+#define WINED3D_MAX_ACTIVE_LIGHTS 8
+#define WINED3D_MAX_CONSTS_B 16
+#define WINED3D_MAX_CONSTS_I 16
+#define WINED3D_MAX_VS_CONSTS_F 256
+#define WINED3D_MAX_PS_CONSTS_F 224
+
struct wined3d_display_mode
{
UINT width;
@@ -2111,6 +2124,59 @@ struct wined3d_output_desc
HMONITOR monitor;
};
+struct wined3d_stream_state
+{
+ struct wined3d_buffer *buffer;
+ UINT offset;
+ UINT stride;
+ UINT frequency;
+ UINT flags;
+};
+
+#define LIGHTMAP_SIZE 43
+#define LIGHTMAP_HASHFUNC(x) ((x) % LIGHTMAP_SIZE)
+
+struct wined3d_light_state
+{
+ /* Light hashmap. Collisions are handled using linked lists. */
+ struct list light_map[LIGHTMAP_SIZE];
+ const struct wined3d_light_info *lights[WINED3D_MAX_ACTIVE_LIGHTS];
+};
+
+struct wined3d_stateblock_state
+{
+ struct wined3d_vertex_declaration *vertex_declaration;
+ struct wined3d_stream_state streams[WINED3D_MAX_STREAMS + 1];
+ struct wined3d_buffer *index_buffer;
+ enum wined3d_format_id index_format;
+ int base_vertex_index;
+
+ struct wined3d_shader *vs;
+ struct wined3d_vec4 vs_consts_f[WINED3D_MAX_VS_CONSTS_F];
+ struct wined3d_ivec4 vs_consts_i[WINED3D_MAX_CONSTS_I];
+ BOOL vs_consts_b[WINED3D_MAX_CONSTS_B];
+
+ struct wined3d_shader *ps;
+ struct wined3d_vec4 ps_consts_f[WINED3D_MAX_PS_CONSTS_F];
+ struct wined3d_ivec4 ps_consts_i[WINED3D_MAX_CONSTS_I];
+ BOOL ps_consts_b[WINED3D_MAX_CONSTS_B];
+
+ DWORD rs[WINEHIGHEST_RENDER_STATE + 1];
+ struct wined3d_color blend_factor;
+
+ struct wined3d_texture *textures[WINED3D_MAX_COMBINED_SAMPLERS];
+ DWORD sampler_states[WINED3D_MAX_COMBINED_SAMPLERS][WINED3D_HIGHEST_SAMPLER_STATE + 1];
+ DWORD texture_states[WINED3D_MAX_TEXTURES][WINED3D_HIGHEST_TEXTURE_STATE + 1];
+
+ struct wined3d_matrix transforms[WINED3D_HIGHEST_TRANSFORM_STATE + 1];
+ struct wined3d_vec4 clip_planes[WINED3D_MAX_CLIP_DISTANCES];
+ struct wined3d_material material;
+ struct wined3d_viewport viewport;
+ RECT scissor_rect;
+
+ struct wined3d_light_state light_state;
+};
+
struct wined3d_parent_ops
{
void (__stdcall *wined3d_object_destroyed)(void *parent);
@@ -2666,6 +2732,7 @@ void __cdecl wined3d_stateblock_capture(struct wined3d_stateblock *stateblock,
HRESULT __cdecl wined3d_stateblock_create(struct wined3d_device *device, const struct wined3d_stateblock *device_state,
enum wined3d_stateblock_type type, struct wined3d_stateblock **stateblock);
ULONG __cdecl wined3d_stateblock_decref(struct wined3d_stateblock *stateblock);
+const struct wined3d_stateblock_state * __cdecl wined3d_stateblock_get_state(const struct wined3d_stateblock *stateblock);
ULONG __cdecl wined3d_stateblock_incref(struct wined3d_stateblock *stateblock);
void __cdecl wined3d_stateblock_init_contained_states(struct wined3d_stateblock *stateblock);
void __cdecl wined3d_stateblock_reset(struct wined3d_stateblock *stateblock);
--
2.23.0
Nov. 28, 2019
[PATCH v2 1/6] ddraw: Track some more render states in the primary stateblock.
by Zebediah Figura
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
---
dlls/ddraw/device.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/dlls/ddraw/device.c b/dlls/ddraw/device.c
index 51576c81e28..def3e7c2a43 100644
--- a/dlls/ddraw/device.c
+++ b/dlls/ddraw/device.c
@@ -3555,6 +3555,7 @@ static void setup_lighting(const struct d3d_device *device, DWORD fvf, DWORD fla
if (!device->material || !(fvf & D3DFVF_NORMAL) || (flags & D3DDP_DONOTLIGHT))
enable = FALSE;
+ wined3d_stateblock_set_render_state(device->state, WINED3D_RS_LIGHTING, enable);
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_LIGHTING, enable);
}
@@ -7033,11 +7034,18 @@ static HRESULT d3d_device_init(struct d3d_device *device, struct ddraw *ddraw,
wined3d_device_set_render_state(ddraw->wined3d_device, WINED3D_RS_ZENABLE,
d3d_device_update_depth_stencil(device));
if (version == 1) /* Color keying is initially enabled for version 1 devices. */
+ {
+ wined3d_stateblock_set_render_state(ddraw->state, WINED3D_RS_COLORKEYENABLE, TRUE);
wined3d_device_set_render_state(ddraw->wined3d_device, WINED3D_RS_COLORKEYENABLE, TRUE);
+ }
else if (version == 2)
+ {
+ wined3d_stateblock_set_render_state(ddraw->state, WINED3D_RS_SPECULARENABLE, TRUE);
wined3d_device_set_render_state(ddraw->wined3d_device, WINED3D_RS_SPECULARENABLE, TRUE);
+ }
if (version < 7)
{
+ wined3d_stateblock_set_render_state(ddraw->state, WINED3D_RS_NORMALIZENORMALS, TRUE);
wined3d_device_set_render_state(ddraw->wined3d_device, WINED3D_RS_NORMALIZENORMALS, TRUE);
IDirect3DDevice3_SetRenderState(&device->IDirect3DDevice3_iface,
D3DRENDERSTATE_TEXTUREMAPBLEND, D3DTBLEND_MODULATE);
--
2.23.0
Nov. 28, 2019
Re: [PATCH 5/5] wined3d: Store the blend factor in the stateblock as a render state.
by Marvin
Hi,
While running your changed tests, I think I found new failures.
Being a bot and all I'm not very good at pattern recognition, so I might be
wrong, but could you please double-check?
Full results can be found at:
https://testbot.winehq.org/JobDetails.pl?Key=61005
Your paranoid android.
=== debian10 (32 bit report) ===
ddraw:
ddraw2.c:4014: Test failed: Initial D3DRENDERSTATE_SPECULARENABLE is 0, expected TRUE.
=== debian10 (32 bit Chinese:China report) ===
ddraw:
ddraw2.c:4014: Test failed: Initial D3DRENDERSTATE_SPECULARENABLE is 0, expected TRUE.
=== debian10 (32 bit WoW report) ===
ddraw:
ddraw2.c:4014: Test failed: Initial D3DRENDERSTATE_SPECULARENABLE is 0, expected TRUE.
=== debian10 (64 bit WoW report) ===
ddraw:
ddraw2.c:4014: Test failed: Initial D3DRENDERSTATE_SPECULARENABLE is 0, expected TRUE.
Nov. 28, 2019