From b32753d3cffa4b65b5fc2a15dd31f41089519360 Mon Sep 17 00:00:00 2001
From: "gman@google.com" <gman@google.com@0039d316-1c4b-4281-b951-d872f2087c98>
Date: Sat, 26 Sep 2009 05:23:08 +0000
Subject: Fix to allow NOOP to work again.

Review URL: http://codereview.chromium.org/222017

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@27321 0039d316-1c4b-4281-b951-d872f2087c98
---
 o3d/command_buffer/service/cross/gapi_decoder.cc | 27 ++++++++++++++++++++----
 1 file changed, 23 insertions(+), 4 deletions(-)

(limited to 'o3d')

diff --git a/o3d/command_buffer/service/cross/gapi_decoder.cc b/o3d/command_buffer/service/cross/gapi_decoder.cc
index e19b67a..7f40d97 100644
--- a/o3d/command_buffer/service/cross/gapi_decoder.cc
+++ b/o3d/command_buffer/service/cross/gapi_decoder.cc
@@ -90,7 +90,7 @@ BufferSyncInterface::ParseError GAPIDecoder::DoCommand(
     const CommandInfo& info = g_command_info[command];
   unsigned int info_arg_count = static_cast<unsigned int>(info.arg_count);
     if ((info.arg_flags == cmd::kFixed && arg_count == info_arg_count) ||
-        (info.arg_flags == cmd::kAtLeastN && arg_count > info_arg_count)) {
+        (info.arg_flags == cmd::kAtLeastN && arg_count >= info_arg_count)) {
       switch (command) {
         #define O3D_COMMAND_BUFFER_CMD_OP(name)                    \
           case cmd::name::kCmdId:                                  \
@@ -190,8 +190,12 @@ BufferSyncInterface::ParseError GAPIDecoder::HandleDestroyVertexBuffer(
 BufferSyncInterface::ParseError GAPIDecoder::HandleSetVertexBufferDataImmediate(
     uint32 arg_count,
     const cmd::SetVertexBufferDataImmediate& args) {
+  uint32 size = ImmediateDataSize(arg_count, args);
+  if (size == 0) {
+    return ParseError::kParseNoError;
+  }
   return gapi_->SetVertexBufferData(args.id, args.offset,
-                                    ImmediateDataSize(arg_count, args),
+                                    size,
                                     AddressAfterStruct(args));
 }
 
@@ -236,8 +240,11 @@ BufferSyncInterface::ParseError GAPIDecoder::HandleDestroyIndexBuffer(
 BufferSyncInterface::ParseError GAPIDecoder::HandleSetIndexBufferDataImmediate(
     uint32 arg_count,
     const cmd::SetIndexBufferDataImmediate& args) {
-  return gapi_->SetIndexBufferData(args.id, args.offset,
-                                   ImmediateDataSize(arg_count, args),
+  uint32 size = ImmediateDataSize(arg_count, args);
+  if (size == 0) {
+    return ParseError::kParseNoError;
+  }
+  return gapi_->SetIndexBufferData(args.id, args.offset, size,
                                    AddressAfterStruct(args));
 }
 
@@ -354,6 +361,9 @@ BufferSyncInterface::ParseError GAPIDecoder::HandleCreateEffectImmediate(
   uint32 data_size = ImmediateDataSize(arg_count, args);
   if (size > data_size)
     return BufferSyncInterface::kParseInvalidArguments;
+  if (data_size == 0) {
+    return ParseError::kParseNoError;
+  }
   return gapi_->CreateEffect(args.id, size, AddressAfterStruct(args));
 }
 
@@ -411,6 +421,9 @@ BufferSyncInterface::ParseError GAPIDecoder::HandleCreateParamByNameImmediate(
   uint32 data_size = ImmediateDataSize(arg_count, args);
   if (size > data_size)
     return BufferSyncInterface::kParseInvalidArguments;
+  if (data_size == 0) {
+    return ParseError::kParseNoError;
+  }
   return gapi_->CreateParamByName(args.param_id, args.effect_id, size,
                                   AddressAfterStruct(args));
 }
@@ -443,6 +456,9 @@ BufferSyncInterface::ParseError GAPIDecoder::HandleSetParamDataImmediate(
   uint32 data_size = ImmediateDataSize(arg_count, args);
   if (size > data_size)
     return BufferSyncInterface::kParseInvalidArguments;
+  if (data_size == 0) {
+    return ParseError::kParseNoError;
+  }
   return gapi_->SetParamData(args.id, size, AddressAfterStruct(args));
 }
 
@@ -613,6 +629,9 @@ BufferSyncInterface::ParseError GAPIDecoder::HandleSetTextureDataImmediate(
   if (face >= 6 || unused != 0 ||
       size > data_size)
     return BufferSyncInterface::kParseInvalidArguments;
+  if (data_size == 0) {
+    return ParseError::kParseNoError;
+  }
   return gapi_->SetTextureData(
       args.texture_id, x, y, z, width, height, depth, level,
       static_cast<texture::Face>(face), args.row_pitch,
-- 
cgit v1.1