summaryrefslogtreecommitdiffstats
path: root/o3d
diff options
context:
space:
mode:
Diffstat (limited to 'o3d')
-rw-r--r--o3d/command_buffer/service/cross/gapi_decoder.cc27
1 files changed, 23 insertions, 4 deletions
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,