Index: gpu/command_buffer/client/gles2_implementation.cc |
diff --git a/gpu/command_buffer/client/gles2_implementation.cc b/gpu/command_buffer/client/gles2_implementation.cc |
index 27bdd8a0f99ce0b3943872020c292213cea53393..b1a2aa835febf5ce60d9f9f64b3700c058c656f8 100644 |
--- a/gpu/command_buffer/client/gles2_implementation.cc |
+++ b/gpu/command_buffer/client/gles2_implementation.cc |
@@ -30,6 +30,7 @@ |
#include "gpu/command_buffer/client/vertex_array_object_manager.h" |
#include "gpu/command_buffer/common/gles2_cmd_utils.h" |
#include "gpu/command_buffer/common/id_allocator.h" |
+#include "gpu/command_buffer/common/sync_token.h" |
#include "gpu/command_buffer/common/trace_event.h" |
#include "ui/gfx/geometry/rect.h" |
#include "ui/gfx/geometry/rect_f.h" |
@@ -5385,12 +5386,10 @@ void GLES2Implementation::GenSyncTokenCHROMIUM(GLuint64 fence_sync, |
return; |
} |
- SyncToken* sync_token_data = reinterpret_cast<SyncToken*>(sync_token); |
- memset(sync_token_data, 0, sizeof(SyncToken)); |
- |
- sync_token_data->namespace_id = gpu_control_->GetNamespaceID(); |
- sync_token_data->command_buffer_id = gpu_control_->GetCommandBufferID(); |
- sync_token_data->release_count = fence_sync; |
+ // Copy the data over after setting the data to ensure alignment. |
+ SyncToken sync_token_data(gpu_control_->GetNamespaceID(), |
+ gpu_control_->GetCommandBufferID(), fence_sync); |
+ memcpy(sync_token, &sync_token_data, sizeof(sync_token_data)); |
} |
void GLES2Implementation::WaitSyncTokenCHROMIUM(const GLbyte* sync_token) { |
@@ -5399,11 +5398,12 @@ void GLES2Implementation::WaitSyncTokenCHROMIUM(const GLbyte* sync_token) { |
return; |
}; |
- const SyncToken* sync_token_data = |
- reinterpret_cast<const SyncToken*>(sync_token); |
- helper_->WaitSyncTokenCHROMIUM(sync_token_data->namespace_id, |
- sync_token_data->command_buffer_id, |
- sync_token_data->release_count); |
+ // Copy the data over before data access to ensure alignment. |
+ SyncToken sync_token_data; |
+ memcpy(&sync_token_data, sync_token, sizeof(SyncToken)); |
+ helper_->WaitSyncTokenCHROMIUM(sync_token_data.namespace_id(), |
+ sync_token_data.command_buffer_id(), |
+ sync_token_data.release_count()); |
} |
namespace { |