Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(272)

Unified Diff: gpu/command_buffer/service/texture_manager.cc

Issue 593233002: Modified GPU command signature hash to use a binary representation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Utilize constructor with memset to ensure padding is zeroed out Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: gpu/command_buffer/service/texture_manager.cc
diff --git a/gpu/command_buffer/service/texture_manager.cc b/gpu/command_buffer/service/texture_manager.cc
index 9dc5cc9d924f19a2cd266043f24cb7cc38b4e178..8e1530449057b40937115e583217d45d962610f6 100644
--- a/gpu/command_buffer/service/texture_manager.cc
+++ b/gpu/command_buffer/service/texture_manager.cc
@@ -21,6 +21,72 @@
namespace gpu {
namespace gles2 {
+// The should contain everything to uniquely identify a Texture.
vmiura 2014/09/26 23:36:36 nit: This
David Yen 2014/09/29 16:42:58 Done.
+static const char TextureTag[] = "|Texture|";
+struct TextureSignature {
+ GLenum target_;
+ GLint level_;
+ GLenum min_filter_;
+ GLenum mag_filter_;
+ GLenum wrap_s_;
+ GLenum wrap_t_;
+ GLenum usage_;
+ GLenum internal_format_;
+ GLsizei width_;
+ GLsizei height_;
+ GLsizei depth_;
+ GLint border_;
+ GLenum format_;
+ GLenum type_;
+ bool has_image_;
+ bool can_render_;
+ bool can_render_to_;
+ bool npot_;
+
+ // Since we will be hashing this signature structure, the padding must be
+ // zero initialized. Although the C++11 specifications specify that this is
+ // true, we will use a constructor with a memset to further enforce it instead
+ // of relying on compilers adhering to this deep dark corner specification.
+ TextureSignature(GLenum target,
+ GLint level,
+ GLenum min_filter,
+ GLenum mag_filter,
+ GLenum wrap_s,
+ GLenum wrap_t,
+ GLenum usage,
+ GLenum internal_format,
+ GLsizei width,
+ GLsizei height,
+ GLsizei depth,
+ GLint border,
+ GLenum format,
+ GLenum type,
+ bool has_image,
+ bool can_render,
+ bool can_render_to,
+ bool npot) {
+ memset(this, 0, sizeof(TextureSignature));
+ target_ = target;
+ level_ = level;
+ min_filter_ = min_filter;
+ mag_filter_ = mag_filter;
+ wrap_s_ = wrap_s;
+ wrap_t_ = wrap_t;
+ usage_ = usage;
+ internal_format_ = internal_format;
+ width_ = width;
+ height_ = height;
+ depth_ = depth;
+ border_ = border;
+ format_ = format;
+ type_ = type;
+ has_image_ = has_image;
+ can_render_ = can_render;
+ can_render_to_ = can_render_to;
+ npot_ = npot;
+ }
+};
+
TextureManager::DestructionObserver::DestructionObserver() {}
TextureManager::DestructionObserver::~DestructionObserver() {}
@@ -218,20 +284,32 @@ void Texture::AddToSignature(
level_infos_.size());
DCHECK_LT(static_cast<size_t>(level),
level_infos_[face_index].size());
+
const Texture::LevelInfo& info =
level_infos_[face_index][level];
- *signature += base::StringPrintf(
- "|Texture|target=%04x|level=%d|internal_format=%04x"
- "|width=%d|height=%d|depth=%d|border=%d|format=%04x|type=%04x"
- "|image=%d|canrender=%d|canrenderto=%d|npot_=%d"
- "|min_filter=%04x|mag_filter=%04x|wrap_s=%04x|wrap_t=%04x"
- "|usage=%04x",
- target, level, info.internal_format,
- info.width, info.height, info.depth, info.border,
- info.format, info.type, info.image.get() != NULL,
- CanRender(feature_info), CanRenderTo(), npot_,
- min_filter_, mag_filter_, wrap_s_, wrap_t_,
- usage_);
+
+ TextureSignature signature_data(target,
+ level,
+ min_filter_,
+ mag_filter_,
+ wrap_s_,
+ wrap_t_,
+ usage_,
+ info.internal_format,
+ info.width,
+ info.height,
+ info.depth,
+ info.border,
+ info.format,
+ info.type,
+ info.image.get() != NULL,
+ CanRender(feature_info),
+ CanRenderTo(),
+ npot_);
+
+ signature->append(TextureTag, sizeof(TextureTag));
+ signature->append(reinterpret_cast<const char*>(&signature_data),
+ sizeof(signature_data));
}
void Texture::SetMailboxManager(MailboxManager* mailbox_manager) {
@@ -1267,6 +1345,10 @@ void TextureManager::SetLevelImage(
ref->texture()->SetLevelImage(feature_info_.get(), target, level, image);
}
+size_t TextureManager::GetSignatureSize() const {
+ return sizeof(TextureTag) + sizeof(TextureSignature);
+}
+
void TextureManager::AddToSignature(
TextureRef* ref,
GLenum target,

Powered by Google App Engine
This is Rietveld 408576698