X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=common%2Ftrace_parser.cpp;h=f3aea7e7cf482f26f69e74432691bcefbb75ab1c;hb=93d51c3065260cdb088f33d3e6d5bdfb4707c1a9;hp=0e4fba098db597d4e782251e7149d7c36ee80a0c;hpb=889d32c7208736694073136f62084910e375d2a8;p=apitrace diff --git a/common/trace_parser.cpp b/common/trace_parser.cpp index 0e4fba0..f3aea7e 100644 --- a/common/trace_parser.cpp +++ b/common/trace_parser.cpp @@ -248,9 +248,10 @@ Parser::parse_function_sig(void) { api = trace::API_GL; } 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* + } 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* + (n[0] == 'C' && n[1] == 'r' && n[2] == 'e' && n[3] == 'a' && n[4] == 't' && n[5] == 'e')) { // Create* api = trace::API_DX; } else { /* TODO */ @@ -557,6 +558,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); @@ -613,6 +617,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); @@ -784,6 +791,19 @@ 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]; @@ -814,7 +834,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: