15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/ipc/gpu_command_buffer_traits.h" 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "gpu/command_buffer/common/mailbox_holder.h" 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace IPC { 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ParamTraits<gpu::CommandBuffer::State> ::Write(Message* m, 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const param_type& p) { 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteParam(m, p.num_entries); 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteParam(m, p.get_offset); 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteParam(m, p.put_offset); 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteParam(m, p.token); 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteParam(m, static_cast<int32>(p.error)); 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteParam(m, p.generation); 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ParamTraits<gpu::CommandBuffer::State> ::Read(const Message* m, 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PickleIterator* iter, 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) param_type* p) { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 temp; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ReadParam(m, iter, &p->num_entries) && 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadParam(m, iter, &p->get_offset) && 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadParam(m, iter, &p->put_offset) && 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadParam(m, iter, &p->token) && 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadParam(m, iter, &temp) && 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadParam(m, iter, &p->generation)) { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p->error = static_cast<gpu::error::Error>(temp); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ParamTraits<gpu::CommandBuffer::State> ::Log(const param_type& p, 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* l) { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l->append("<CommandBuffer::State>"); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ParamTraits<gpu::Mailbox>::Write(Message* m, const param_type& p) { 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) m->WriteBytes(p.name, sizeof(p.name)); 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool ParamTraits<gpu::Mailbox>::Read(const Message* m, 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PickleIterator* iter, 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) param_type* p) { 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const char* bytes = NULL; 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!m->ReadBytes(iter, &bytes, sizeof(p->name))) 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(bytes); 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) memcpy(p->name, bytes, sizeof(p->name)); 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ParamTraits<gpu::Mailbox>::Log(const param_type& p, std::string* l) { 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < sizeof(p.name); ++i) 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *l += base::StringPrintf("%02x", p.name[i]); 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ParamTraits<gpu::MailboxHolder>::Write(Message* m, const param_type& p) { 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WriteParam(m, p.mailbox); 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WriteParam(m, p.texture_target); 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WriteParam(m, p.sync_point); 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool ParamTraits<gpu::MailboxHolder>::Read(const Message* m, 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) PickleIterator* iter, 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) param_type* p) { 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!ReadParam(m, iter, &p->mailbox) || 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) !ReadParam(m, iter, &p->texture_target) || 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) !ReadParam(m, iter, &p->sync_point)) 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return false; 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return true; 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ParamTraits<gpu::MailboxHolder>::Log(const param_type& p, std::string* l) { 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ParamTraits<gpu::Mailbox>::Log(p.mailbox, l); 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *l += base::StringPrintf(":%04x@%d", p.texture_target, p.sync_point); 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace IPC 84