Index: gpu/command_buffer/client/cmd_buffer_helper.h |
diff --git a/gpu/command_buffer/client/cmd_buffer_helper.h b/gpu/command_buffer/client/cmd_buffer_helper.h |
index 954107f1590a6b0816146b93dfeb6d2fb9199758..404d68d49ddf372bfe98b4aebb1cc1d090a35dea 100644 |
--- a/gpu/command_buffer/client/cmd_buffer_helper.h |
+++ b/gpu/command_buffer/client/cmd_buffer_helper.h |
@@ -135,27 +135,13 @@ class GPU_EXPORT CommandBufferHelper { |
return space; |
} |
- template <typename T> |
- void ForceNullCheck(T* data) { |
-#if defined(OS_WIN) && defined(ARCH_CPU_64_BITS) |
- // 64-bit MSVC's alias analysis was determining that the command buffer |
- // entry couldn't be NULL, so it optimized out the NULL check. |
- // Dereferencing the same datatype through a volatile pointer seems to |
- // prevent that from happening. http://crbug.com/361936 |
- if (data) |
- static_cast<volatile T*>(data)->header; |
-#endif |
- } |
- |
// Typed version of GetSpace. Gets enough room for the given type and returns |
// a reference to it. |
template <typename T> |
T* GetCmdSpace() { |
COMPILE_ASSERT(T::kArgFlags == cmd::kFixed, Cmd_kArgFlags_not_kFixed); |
int32 space_needed = ComputeNumEntries(sizeof(T)); |
- T* data = static_cast<T*>(GetSpace(space_needed)); |
- ForceNullCheck(data); |
- return data; |
+ return new (GetSpace(space_needed)) T; |
} |
// Typed version of GetSpace for immediate commands. |
@@ -163,9 +149,7 @@ class GPU_EXPORT CommandBufferHelper { |
T* GetImmediateCmdSpace(size_t data_space) { |
COMPILE_ASSERT(T::kArgFlags == cmd::kAtLeastN, Cmd_kArgFlags_not_kAtLeastN); |
int32 space_needed = ComputeNumEntries(sizeof(T) + data_space); |
- T* data = static_cast<T*>(GetSpace(space_needed)); |
- ForceNullCheck(data); |
- return data; |
+ return new (GetSpace(space_needed)) T; |
} |
// Typed version of GetSpace for immediate commands. |
@@ -173,9 +157,7 @@ class GPU_EXPORT CommandBufferHelper { |
T* GetImmediateCmdSpaceTotalSize(size_t total_space) { |
COMPILE_ASSERT(T::kArgFlags == cmd::kAtLeastN, Cmd_kArgFlags_not_kAtLeastN); |
int32 space_needed = ComputeNumEntries(total_space); |
- T* data = static_cast<T*>(GetSpace(space_needed)); |
- ForceNullCheck(data); |
- return data; |
+ return new (GetSpace(space_needed)) T; |
} |
int32 last_token_read() const { |