X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=common%2Ftrace_parser.cpp;h=7a8c4f96e551802cfca9d8a85ae5f597e19629d5;hb=4c4896f8490aca7f32956e402ffdf413d04c36dd;hp=896bfd437fc720e835458abfefbbfc4ad34d863c;hpb=12a22803faa06a0db229b6dfb6130a0e8156ba31;p=apitrace diff --git a/common/trace_parser.cpp b/common/trace_parser.cpp index 896bfd4..7a8c4f9 100644 --- a/common/trace_parser.cpp +++ b/common/trace_parser.cpp @@ -242,12 +242,16 @@ Parser::parse_function_sig(void) { */ if (api == API_UNKNOWN) { const char *n = sig->name; - if ((n[0] == 'g' && n[1] == 'l' && n[2] == 'X') || // glX - (n[0] == 'w' && n[1] == 'g' && n[2] == 'l' && n[3] >= 'A' && n[3] <= 'Z') || // wgl[A-Z] - (n[0] == 'C' && n[1] == 'G' && n[2] == 'L')) { // CGL + if ((n[0] == 'g' && n[1] == 'l' && n[2] == 'X') || // glX* + (n[0] == 'w' && n[1] == 'g' && n[2] == 'l' && n[3] >= 'A' && n[3] <= 'Z') || // wgl[A-Z]* + (n[0] == 'C' && n[1] == 'G' && n[2] == 'L')) { // CGL* api = trace::API_GL; - } else if (n[0] == 'e' && n[1] == 'g' && n[2] == 'l' && n[3] >= 'A' && n[3] <= 'Z') { // egl + } else if (n[0] == 'e' && n[1] == 'g' && n[2] == 'l' && n[3] >= 'A' && n[3] <= 'Z') { // egl[A-Z]* api = trace::API_EGL; + } else if (n[0] == 'D' && + ((n[1] == 'i' && n[2] == 'r' && n[3] == 'e' && n[4] == 'c' && n[5] == 't') || // Direct* + (n[1] == '3' && n[2] == 'D'))) { // D3D* + api = trace::API_DX; } else { /* TODO */ } @@ -553,6 +557,9 @@ Value *Parser::parse_value(void) { case trace::TYPE_OPAQUE: value = parse_opaque(); break; + case trace::TYPE_REPR: + value = parse_repr(); + break; default: std::cerr << "error: unknown type " << c << "\n"; exit(1); @@ -609,6 +616,9 @@ void Parser::scan_value(void) { case trace::TYPE_OPAQUE: scan_opaque(); break; + case trace::TYPE_REPR: + scan_repr(); + break; default: std::cerr << "error: unknown type " << c << "\n"; exit(1); @@ -734,7 +744,7 @@ Value *Parser::parse_blob(void) { size_t size = read_uint(); Blob *blob = new Blob(size); if (size) { - file->read(blob->buf, (unsigned)size); + file->read(blob->buf, size); } return blob; } @@ -780,11 +790,24 @@ void Parser::scan_opaque() { } +Value *Parser::parse_repr() { + Value *humanValue = parse_value(); + Value *machineValue = parse_value(); + return new Repr(humanValue, machineValue); +} + + +void Parser::scan_repr() { + scan_value(); + scan_value(); +} + + const char * Parser::read_string(void) { size_t len = read_uint(); char * value = new char[len + 1]; if (len) { - file->read(value, (unsigned)len); + file->read(value, len); } value[len] = 0; #if TRACE_VERBOSE @@ -810,7 +833,7 @@ Parser::read_sint(void) { c = read_byte(); switch (c) { case trace::TYPE_SINT: - return -read_uint(); + return -(signed long long)read_uint(); case trace::TYPE_UINT: return read_uint(); default: