From: Zebediah Figura Subject: [PATCH v2 2/5] d3d9: Apply the device state before executing a draw call. Message-Id: <20191211034354.809085-2-z.figura12@gmail.com> Date: Tue, 10 Dec 2019 21:43:51 -0600 In-Reply-To: <20191211034354.809085-1-z.figura12@gmail.com> References: <20191211034354.809085-1-z.figura12@gmail.com> Signed-off-by: Zebediah Figura --- dlls/d3d9/device.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/dlls/d3d9/device.c b/dlls/d3d9/device.c index 82fba25ce7..be9c2a9d5a 100644 --- a/dlls/d3d9/device.c +++ b/dlls/d3d9/device.c @@ -1821,6 +1821,7 @@ static HRESULT WINAPI d3d9_device_ColorFill(IDirect3DDevice9Ex *iface, return D3DERR_INVALIDCALL; } + wined3d_device_apply_stateblock(device->wined3d_device, device->state); rtv = d3d9_surface_acquire_rendertarget_view(surface_impl); hr = wined3d_device_clear_rendertarget_view(device->wined3d_device, rtv, rect, WINED3DCLEAR_TARGET, &c, 0.0f, 0); @@ -2071,6 +2072,7 @@ static HRESULT WINAPI d3d9_device_Clear(IDirect3DDevice9Ex *iface, DWORD rect_co wined3d_color_from_d3dcolor(&c, color); wined3d_mutex_lock(); + wined3d_device_apply_stateblock(device->wined3d_device, device->state); hr = wined3d_device_clear(device->wined3d_device, rect_count, (const RECT *)rects, flags, &c, z, stencil); if (SUCCEEDED(hr)) d3d9_rts_flag_auto_gen_mipmap(device); @@ -2654,6 +2656,7 @@ static HRESULT WINAPI d3d9_device_ValidateDevice(IDirect3DDevice9Ex *iface, DWOR TRACE("iface %p, pass_count %p.\n", iface, pass_count); wined3d_mutex_lock(); + wined3d_device_apply_stateblock(device->wined3d_device, device->state); hr = wined3d_device_validate_device(device->wined3d_device, pass_count); wined3d_mutex_unlock(); @@ -2885,6 +2888,7 @@ static HRESULT WINAPI d3d9_device_DrawPrimitive(IDirect3DDevice9Ex *iface, WARN("Called without a valid vertex declaration set.\n"); return D3DERR_INVALIDCALL; } + wined3d_device_apply_stateblock(device->wined3d_device, device->state); vertex_count = vertex_count_from_primitive_count(primitive_type, primitive_count); d3d9_device_upload_sysmem_vertex_buffers(device, 0, start_vertex, vertex_count); d3d9_generate_auto_mipmaps(device); @@ -2917,6 +2921,7 @@ static HRESULT WINAPI d3d9_device_DrawIndexedPrimitive(IDirect3DDevice9Ex *iface WARN("Called without a valid vertex declaration set.\n"); return D3DERR_INVALIDCALL; } + wined3d_device_apply_stateblock(device->wined3d_device, device->state); index_count = vertex_count_from_primitive_count(primitive_type, primitive_count); d3d9_device_upload_sysmem_vertex_buffers(device, base_vertex_idx, min_vertex_idx, vertex_count); d3d9_device_upload_sysmem_index_buffer(device, start_idx, index_count); @@ -3003,6 +3008,7 @@ static HRESULT WINAPI d3d9_device_DrawPrimitiveUP(IDirect3DDevice9Ex *iface, return D3DERR_INVALIDCALL; } + wined3d_device_apply_stateblock(device->wined3d_device, device->state); hr = d3d9_device_prepare_vertex_buffer(device, size); if (FAILED(hr)) goto done; @@ -3119,6 +3125,7 @@ static HRESULT WINAPI d3d9_device_DrawIndexedPrimitiveUP(IDirect3DDevice9Ex *ifa return D3DERR_INVALIDCALL; } + wined3d_device_apply_stateblock(device->wined3d_device, device->state); hr = d3d9_device_prepare_vertex_buffer(device, vtx_size); if (FAILED(hr)) goto done; @@ -3203,6 +3210,8 @@ static HRESULT WINAPI d3d9_device_ProcessVertices(IDirect3DDevice9Ex *iface, wined3d_mutex_lock(); + wined3d_device_apply_stateblock(device->wined3d_device, device->state); + /* Note that an alternative approach would be to simply create these * buffers with WINED3D_RESOURCE_ACCESS_MAP_R and update them here like we * do for draws. In some regards that would be easier, but it seems less -- 2.24.0