OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ui/gfx/surface/accelerated_surface_win.h" | 5 #include "ui/gfx/surface/accelerated_surface_win.h" |
6 | 6 |
7 #include <windows.h> | 7 #include <windows.h> |
8 | 8 |
9 #include <list> | 9 #include <list> |
10 | 10 |
11 #include "base/bind.h" | 11 #include "base/bind.h" |
12 #include "base/callback.h" | 12 #include "base/callback.h" |
13 #include "base/command_line.h" | 13 #include "base/command_line.h" |
14 #include "base/debug/trace_event.h" | 14 #include "base/debug/trace_event.h" |
15 #include "base/lazy_instance.h" | 15 #include "base/lazy_instance.h" |
16 #include "base/memory/scoped_ptr.h" | 16 #include "base/memory/scoped_ptr.h" |
17 #include "base/memory/weak_ptr.h" | 17 #include "base/memory/weak_ptr.h" |
18 #include "base/stringprintf.h" | 18 #include "base/stringprintf.h" |
19 #include "base/threading/thread.h" | 19 #include "base/threading/thread.h" |
20 #include "base/tracked_objects.h" | 20 #include "base/tracked_objects.h" |
21 #include "base/win/wrapped_window_proc.h" | 21 #include "base/win/wrapped_window_proc.h" |
22 #include "ipc/ipc_message.h" | 22 #include "ipc/ipc_message.h" |
23 #include "ui/base/win/hwnd_util.h" | 23 #include "ui/base/win/hwnd_util.h" |
24 #include "ui/gfx/gl/gl_switches.h" | 24 #include "ui/gfx/gl/gl_switches.h" |
25 | 25 |
26 #pragma comment(lib, "d3d9.lib") | 26 #pragma comment(lib, "d3d9.lib") |
27 | 27 |
28 namespace { | 28 namespace { |
29 | 29 |
| 30 typedef HRESULT (WINAPI *Direct3DCreate9ExFunc)(UINT sdk_version, |
| 31 IDirect3D9Ex **d3d); |
| 32 |
30 const int64 kPollQueryInterval = 1; | 33 const int64 kPollQueryInterval = 1; |
31 | 34 |
| 35 const wchar_t kD3D9ModuleName[] = L"d3d9.dll"; |
| 36 const char kCreate3D9DeviceExName[] = "Direct3DCreate9Ex"; |
| 37 |
32 class QuerySyncThread | 38 class QuerySyncThread |
33 : public base::Thread, | 39 : public base::Thread, |
34 public base::RefCounted<QuerySyncThread> { | 40 public base::RefCounted<QuerySyncThread> { |
35 public: | 41 public: |
36 explicit QuerySyncThread(const char* name); | 42 explicit QuerySyncThread(const char* name); |
37 virtual ~QuerySyncThread(); | 43 virtual ~QuerySyncThread(); |
38 | 44 |
39 // Invoke the completion task when the query completes. | 45 // Invoke the completion task when the query completes. |
40 void AcknowledgeQuery(const base::win::ScopedComPtr<IDirect3DQuery9>& query, | 46 void AcknowledgeQuery(const base::win::ScopedComPtr<IDirect3DQuery9>& query, |
41 const base::Closure& completion_task); | 47 const base::Closure& completion_task); |
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
323 Sleep(0); | 329 Sleep(0); |
324 } while (hr == S_FALSE); | 330 } while (hr == S_FALSE); |
325 } | 331 } |
326 } | 332 } |
327 | 333 |
328 void AcceleratedSurface::DoInitialize() { | 334 void AcceleratedSurface::DoInitialize() { |
329 TRACE_EVENT0("surface", "DoInitialize"); | 335 TRACE_EVENT0("surface", "DoInitialize"); |
330 | 336 |
331 HRESULT hr; | 337 HRESULT hr; |
332 | 338 |
| 339 HMODULE module = GetModuleHandle(kD3D9ModuleName); |
| 340 if (!module) |
| 341 return; |
| 342 |
| 343 Direct3DCreate9ExFunc create_func = reinterpret_cast<Direct3DCreate9ExFunc>( |
| 344 GetProcAddress(module, kCreate3D9DeviceExName)); |
| 345 if (!create_func) |
| 346 return; |
| 347 |
333 base::win::ScopedComPtr<IDirect3D9Ex> d3d; | 348 base::win::ScopedComPtr<IDirect3D9Ex> d3d; |
334 hr = Direct3DCreate9Ex(D3D_SDK_VERSION, d3d.Receive()); | 349 hr = create_func(D3D_SDK_VERSION, d3d.Receive()); |
335 if (FAILED(hr)) | 350 if (FAILED(hr)) |
336 return; | 351 return; |
337 | 352 |
338 D3DPRESENT_PARAMETERS parameters = { 0 }; | 353 D3DPRESENT_PARAMETERS parameters = { 0 }; |
339 parameters.BackBufferWidth = 1; | 354 parameters.BackBufferWidth = 1; |
340 parameters.BackBufferHeight = 1; | 355 parameters.BackBufferHeight = 1; |
341 parameters.BackBufferCount = 1; | 356 parameters.BackBufferCount = 1; |
342 parameters.BackBufferFormat = D3DFMT_A8R8G8B8; | 357 parameters.BackBufferFormat = D3DFMT_A8R8G8B8; |
343 parameters.hDeviceWindow = window_; | 358 parameters.hDeviceWindow = window_; |
344 parameters.Windowed = TRUE; | 359 parameters.Windowed = TRUE; |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
496 completion_task); | 511 completion_task); |
497 } | 512 } |
498 | 513 |
499 { | 514 { |
500 TRACE_EVENT0("surface", "Present"); | 515 TRACE_EVENT0("surface", "Present"); |
501 hr = device_->Present(&rect, &rect, NULL, NULL); | 516 hr = device_->Present(&rect, &rect, NULL, NULL); |
502 if (FAILED(hr)) | 517 if (FAILED(hr)) |
503 return; | 518 return; |
504 } | 519 } |
505 } | 520 } |
OLD | NEW |