diff options
author | nick@chromium.org <nick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-21 20:30:53 +0000 |
---|---|---|
committer | nick@chromium.org <nick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-21 20:30:53 +0000 |
commit | a379c200c32a3627e70e885ba1d8caffde1df722 (patch) | |
tree | e022c0b02340ea1d992aa3a2c0d93cab0680f250 /ui/surface | |
parent | 2c3c921b6dc38cfa6780644bf9f25034a7c58a40 (diff) | |
download | chromium_src-a379c200c32a3627e70e885ba1d8caffde1df722.zip chromium_src-a379c200c32a3627e70e885ba1d8caffde1df722.tar.gz chromium_src-a379c200c32a3627e70e885ba1d8caffde1df722.tar.bz2 |
Restore the caching behavior in AccleratedSurfaceTransformer::CompileShaderCombo. This method is supposed to do lazy compilation with caching, and the way it's called from SetShaderCombo relies on this.
BUG=170767, 170875, 177259
TEST=See that pages can still render after device reset
Review URL: https://chromiumcodereview.appspot.com/12328026
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@183855 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/surface')
-rw-r--r-- | ui/surface/accelerated_surface_transformer_win.cc | 44 |
1 files changed, 22 insertions, 22 deletions
diff --git a/ui/surface/accelerated_surface_transformer_win.cc b/ui/surface/accelerated_surface_transformer_win.cc index 834c5b8..30fd1af 100644 --- a/ui/surface/accelerated_surface_transformer_win.cc +++ b/ui/surface/accelerated_surface_transformer_win.cc @@ -181,35 +181,35 @@ bool AcceleratedSurfaceTransformer::DoInit(IDirect3DDevice9* device) { bool AcceleratedSurfaceTransformer::CompileShaderCombo( ShaderCombo shader) { - vertex_shaders_[shader] = NULL; + if (!vertex_shaders_[shader]) { + HRESULT hr = device_->CreateVertexShader( + reinterpret_cast<const DWORD*>(vertex_shader_sources_[shader]), + vertex_shaders_[shader].Receive()); - HRESULT hr = device_->CreateVertexShader( - reinterpret_cast<const DWORD*>(vertex_shader_sources_[shader]), - vertex_shaders_[shader].Receive()); - - if (FAILED(hr)) - return false; + if (FAILED(hr)) + return false; - for (int i = 0; i < NUM_SHADERS; ++i) { - if (vertex_shader_sources_[i] == vertex_shader_sources_[shader] && - i != shader) { - vertex_shaders_[i] = vertex_shaders_[shader]; + for (int i = 0; i < NUM_SHADERS; ++i) { + if (vertex_shader_sources_[i] == vertex_shader_sources_[shader] && + i != shader) { + vertex_shaders_[i] = vertex_shaders_[shader]; + } } } - pixel_shaders_[shader] = NULL; + if (!pixel_shaders_[shader]) { + HRESULT hr = device_->CreatePixelShader( + reinterpret_cast<const DWORD*>(pixel_shader_sources_[shader]), + pixel_shaders_[shader].Receive()); - hr = device_->CreatePixelShader( - reinterpret_cast<const DWORD*>(pixel_shader_sources_[shader]), - pixel_shaders_[shader].Receive()); - - if (FAILED(hr)) - return false; + if (FAILED(hr)) + return false; - for (int i = 0; i < NUM_SHADERS; ++i) { - if (pixel_shader_sources_[i] == pixel_shader_sources_[shader] && - i != shader) { - pixel_shaders_[i] = pixel_shaders_[shader]; + for (int i = 0; i < NUM_SHADERS; ++i) { + if (pixel_shader_sources_[i] == pixel_shader_sources_[shader] && + i != shader) { + pixel_shaders_[i] = pixel_shaders_[shader]; + } } } |