Hook up ANGLE with CityHash.
This enables name hashing for shaders behind a commandline switch --enable-shader-name-hashing.
Also, this CL does not implement the post processing of compile/link error logs.
BUG=160369
TEST=webgl conformance tests, webgl demos
Review URL: https://codereview.chromium.org/11363182
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@167422 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/gpu/DEPS b/gpu/DEPS
index c989f54..42fcce5 100644
--- a/gpu/DEPS
+++ b/gpu/DEPS
@@ -2,6 +2,7 @@
"+native_client/src/include",
"+third_party/angle",
"+third_party/amd",
+ "+third_party/smhasher",
"+../../gpu_export.h",
"+../command_buffer",
"+../client",
diff --git a/gpu/command_buffer/service/feature_info.cc b/gpu/command_buffer/service/feature_info.cc
index 0873f0f5..7283ac2 100644
--- a/gpu/command_buffer/service/feature_info.cc
+++ b/gpu/command_buffer/service/feature_info.cc
@@ -81,7 +81,8 @@
use_arb_occlusion_query2_for_occlusion_query_boolean(false),
use_arb_occlusion_query_for_occlusion_query_boolean(false),
native_vertex_array_object(false),
- disable_workarounds(false) {
+ disable_workarounds(false),
+ enable_shader_name_hashing(false) {
}
FeatureInfo::Workarounds::Workarounds()
@@ -226,6 +227,11 @@
CommandLine::ForCurrentProcess()->HasSwitch(
switches::kDisableGpuDriverBugWorkarounds);
+ feature_flags_.enable_shader_name_hashing =
+ CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kEnableShaderNameHashing);
+
+
bool npot_ok = false;
AddExtensionString("GL_ANGLE_translated_shader_source");
diff --git a/gpu/command_buffer/service/feature_info.h b/gpu/command_buffer/service/feature_info.h
index 076264e6..ec03789 100644
--- a/gpu/command_buffer/service/feature_info.h
+++ b/gpu/command_buffer/service/feature_info.h
@@ -41,6 +41,7 @@
bool use_arb_occlusion_query_for_occlusion_query_boolean;
bool native_vertex_array_object;
bool disable_workarounds;
+ bool enable_shader_name_hashing;
};
struct Workarounds {
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
index 075bb6b..772d6d4 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -66,11 +66,21 @@
#define GL_DEPTH24_STENCIL8 0x88F0
#endif
+// TODO(zmo): we can't include "City.h" due to type def conflicts.
+extern uint64 CityHash64(const char*, size_t);
+
namespace gpu {
namespace gles2 {
namespace {
+
static const char kOESDerivativeExtension[] = "GL_OES_standard_derivatives";
+
+khronos_uint64_t CityHashForAngle(const char* name, unsigned int len) {
+ return static_cast<khronos_uint64_t>(
+ CityHash64(name, static_cast<size_t>(len)));
+}
+
}
class GLES2DecoderImpl;
@@ -2314,6 +2324,9 @@
features().oes_egl_image_external ? 1 : 0;
}
+ if (features().enable_shader_name_hashing)
+ resources.HashFunction = &CityHashForAngle;
+
ShShaderSpec shader_spec = force_webgl_glsl_validation_ ||
features().chromium_webglsl ? SH_WEBGL_SPEC : SH_GLES2_SPEC;
ShaderTranslatorInterface::GlslImplementationType implementation_type =
diff --git a/gpu/command_buffer/service/gpu_switches.cc b/gpu/command_buffer/service/gpu_switches.cc
index 876ff4d..d96fd71 100644
--- a/gpu/command_buffer/service/gpu_switches.cc
+++ b/gpu/command_buffer/service/gpu_switches.cc
@@ -26,6 +26,9 @@
// Turn on Calling GL Error after every command.
const char kEnableGPUDebugging[] = "enable-gpu-debugging";
+// Turn on user-defined name hashing in shaders.
+const char kEnableShaderNameHashing[] = "enable-shader-name-hashing";
+
// Turn off gpu program caching
const char kDisableGpuProgramCache[] = "disable-gpu-program-cache";
diff --git a/gpu/command_buffer/service/gpu_switches.h b/gpu/command_buffer/service/gpu_switches.h
index 535be60..90d4a97 100644
--- a/gpu/command_buffer/service/gpu_switches.h
+++ b/gpu/command_buffer/service/gpu_switches.h
@@ -17,6 +17,7 @@
GPU_EXPORT extern const char kDisableGpuDriverBugWorkarounds[];
GPU_EXPORT extern const char kEnableGPUCommandLogging[];
GPU_EXPORT extern const char kEnableGPUDebugging[];
+GPU_EXPORT extern const char kEnableShaderNameHashing[];
GPU_EXPORT extern const char kDisableGpuProgramCache[];
GPU_EXPORT extern const char kEnforceGLMinimums[];
GPU_EXPORT extern const char kForceGLFinishWorkaround[];
diff --git a/gpu/command_buffer_service.gypi b/gpu/command_buffer_service.gypi
index c3726ce..0876249 100644
--- a/gpu/command_buffer_service.gypi
+++ b/gpu/command_buffer_service.gypi
@@ -21,6 +21,7 @@
'../ui/surface/surface.gyp:surface',
'../ui/ui.gyp:ui',
'../third_party/angle/src/build_angle.gyp:translator_glsl',
+ '../third_party/smhasher/smhasher.gyp:cityhash',
],
'sources': [
'command_buffer/service/buffer_manager.h',