google / gapid

Graphics API Debugger
https://gapid.dev
Apache License 2.0
2.2k stars 327 forks source link

Implement external memory in Vulkan #2701

Open pmuetschard opened 5 years ago

pmuetschard commented 5 years ago

Opening a vulkan trace of the Q System UI crashes GAPIS. I think it's because of an unsupported extension used by the System UI (I have to uncheck the hide unsupported extensions checkmark). However, a bad trace should not crash GAPIS.

Panic:

panic: runtime error: invalid memory address or nil pointer dereference [recovered]
    panic: Panic at command 785:vkQueueSubmit(queue: 3878241824, submitCount: 1, pSubmits: 0xcb2c20ac, fence: 4067862240) → VK_SUCCESS:
runtime error: invalid memory address or nil pointer dereference [recovered]
    panic: 
--- *resolve.ContextListResolvable ---
 capture:<ID:<data:"+\344\243\244sQ8\350Am\266\213\210X\333\351\201\3275\224" > > config:<replay_device:<ID:<data:"Hm\270\254\026\337\223\225+\231w\327p\300\222\222\375\224v\244" > > > 
 Store():
  gapis/database/database.go:56  github.com/google/gapid/gapis/database.Build
  gapis/resolve/contexts.go:35  github.com/google/gapid/gapis/resolve.Contexts
  gapis/resolve/resolve.go:308  github.com/google/gapid/gapis/resolve.ResolveInternal
  gapis/resolve/resolve.go:270  github.com/google/gapid/gapis/resolve.ResolveService
  gapis/resolve/get.go:33  github.com/google/gapid/gapis/resolve.(*GetResolvable).Resolve
  gapis/database/memory.go:137  github.com/google/gapid/gapis/database.(*record).resolve
  gapis/database/memory.go:241  github.com/google/gapid/gapis/database.(*memory).resolveLocked.func1
  core/app/crash/crash.go:65  github.com/google/gapid/core/app/crash.Go.func1

 Build() #0:
  gapis/database/database.go:60  github.com/google/gapid/gapis/database.Build
  gapis/resolve/contexts.go:35  github.com/google/gapid/gapis/resolve.Contexts
  gapis/resolve/resolve.go:308  github.com/google/gapid/gapis/resolve.ResolveInternal
  gapis/resolve/resolve.go:270  github.com/google/gapid/gapis/resolve.ResolveService
  gapis/resolve/get.go:33  github.com/google/gapid/gapis/resolve.(*GetResolvable).Resolve
  gapis/database/memory.go:137  github.com/google/gapid/gapis/database.(*record).resolve
  gapis/database/memory.go:241  github.com/google/gapid/gapis/database.(*memory).resolveLocked.func1
  core/app/crash/crash.go:65  github.com/google/gapid/core/app/crash.Go.func1

--- *resolve.GetResolvable ---
 path:<contexts:<capture:<ID:<data:"+\344\243\244sQ8\350Am\266\213\210X\333\351\201\3275\224" > > > > config:<replay_device:<ID:<data:"Hm\270\254\026\337\223\225+\231w\327p\300\222\222\375\224v\244" > > > 
 Store():
  gapis/database/database.go:56  github.com/google/gapid/gapis/database.Build
  gapis/resolve/get.go:26  github.com/google/gapid/gapis/resolve.Get
  gapis/server/server.go:388  github.com/google/gapid/gapis/server.(*server).Get
  gapis/server/grpc.go:214  github.com/google/gapid/gapis/server.(*grpcServer).Get
  bazel-out/k8-fastbuild/bin/gapis/service/linux_amd64_stripped/service_go_proto%/github.com/google/gapid/gapis/service/service.pb.go:10548  github.com/google/gapid/gapis/service._Gapid_Get_Handler.func1
  core/app/auth/auth.go:110  github.com/google/gapid/core/app/auth.ServerInterceptor.func1
  bazel-out/k8-fastbuild/bin/gapis/service/linux_amd64_stripped/service_go_proto%/github.com/google/gapid/gapis/service/service.pb.go:10550  github.com/google/gapid/gapis/service._Gapid_Get_Handler
  external/org_golang_google_grpc/server.go:982  google.golang.org/grpc.(*Server).processUnaryRPC
  external/org_golang_google_grpc/server.go:1208  google.golang.org/grpc.(*Server).handleStream

 Build() #0:
  gapis/database/database.go:60  github.com/google/gapid/gapis/database.Build
  gapis/resolve/get.go:26  github.com/google/gapid/gapis/resolve.Get
  gapis/server/server.go:388  github.com/google/gapid/gapis/server.(*server).Get
  gapis/server/grpc.go:214  github.com/google/gapid/gapis/server.(*grpcServer).Get
  bazel-out/k8-fastbuild/bin/gapis/service/linux_amd64_stripped/service_go_proto%/github.com/google/gapid/gapis/service/service.pb.go:10548  github.com/google/gapid/gapis/service._Gapid_Get_Handler.func1
  core/app/auth/auth.go:110  github.com/google/gapid/core/app/auth.ServerInterceptor.func1
  bazel-out/k8-fastbuild/bin/gapis/service/linux_amd64_stripped/service_go_proto%/github.com/google/gapid/gapis/service/service.pb.go:10550  github.com/google/gapid/gapis/service._Gapid_Get_Handler
  external/org_golang_google_grpc/server.go:982  google.golang.org/grpc.(*Server).processUnaryRPC
  external/org_golang_google_grpc/server.go:1208  google.golang.org/grpc.(*Server).handleStream
 [recovered]
    panic: 
--- *resolve.ContextListResolvable ---
 capture:<ID:<data:"+\344\243\244sQ8\350Am\266\213\210X\333\351\201\3275\224" > > config:<replay_device:<ID:<data:"Hm\270\254\026\337\223\225+\231w\327p\300\222\222\375\224v\244" > > > 
 Store():
  gapis/database/database.go:56  github.com/google/gapid/gapis/database.Build
  gapis/resolve/contexts.go:35  github.com/google/gapid/gapis/resolve.Contexts
  gapis/resolve/resolve.go:308  github.com/google/gapid/gapis/resolve.ResolveInternal
  gapis/resolve/resolve.go:270  github.com/google/gapid/gapis/resolve.ResolveService
  gapis/resolve/get.go:33  github.com/google/gapid/gapis/resolve.(*GetResolvable).Resolve
  gapis/database/memory.go:137  github.com/google/gapid/gapis/database.(*record).resolve
  gapis/database/memory.go:241  github.com/google/gapid/gapis/database.(*memory).resolveLocked.func1
  core/app/crash/crash.go:65  github.com/google/gapid/core/app/crash.Go.func1

 Build() #0:
  gapis/database/database.go:60  github.com/google/gapid/gapis/database.Build
  gapis/resolve/contexts.go:35  github.com/google/gapid/gapis/resolve.Contexts
  gapis/resolve/resolve.go:308  github.com/google/gapid/gapis/resolve.ResolveInternal
  gapis/resolve/resolve.go:270  github.com/google/gapid/gapis/resolve.ResolveService
  gapis/resolve/get.go:33  github.com/google/gapid/gapis/resolve.(*GetResolvable).Resolve
  gapis/database/memory.go:137  github.com/google/gapid/gapis/database.(*record).resolve
  gapis/database/memory.go:241  github.com/google/gapid/gapis/database.(*memory).resolveLocked.func1
  core/app/crash/crash.go:65  github.com/google/gapid/core/app/crash.Go.func1

--- *resolve.GetResolvable ---
 path:<contexts:<capture:<ID:<data:"+\344\243\244sQ8\350Am\266\213\210X\333\351\201\3275\224" > > > > config:<replay_device:<ID:<data:"Hm\270\254\026\337\223\225+\231w\327p\300\222\222\375\224v\244" > > > 
 Store():
  gapis/database/database.go:56  github.com/google/gapid/gapis/database.Build
  gapis/resolve/get.go:26  github.com/google/gapid/gapis/resolve.Get
  gapis/server/server.go:388  github.com/google/gapid/gapis/server.(*server).Get
  gapis/server/grpc.go:214  github.com/google/gapid/gapis/server.(*grpcServer).Get
  bazel-out/k8-fastbuild/bin/gapis/service/linux_amd64_stripped/service_go_proto%/github.com/google/gapid/gapis/service/service.pb.go:10548  github.com/google/gapid/gapis/service._Gapid_Get_Handler.func1
  core/app/auth/auth.go:110  github.com/google/gapid/core/app/auth.ServerInterceptor.func1
  bazel-out/k8-fastbuild/bin/gapis/service/linux_amd64_stripped/service_go_proto%/github.com/google/gapid/gapis/service/service.pb.go:10550  github.com/google/gapid/gapis/service._Gapid_Get_Handler
  external/org_golang_google_grpc/server.go:982  google.golang.org/grpc.(*Server).processUnaryRPC
AWoloszyn commented 5 years ago

Do you have the actual call-stack? The stacks posted are just a bunch of goroutines waiting on the database.

Alternatively if you pass me the trace I can see about fixing this.

AWoloszyn commented 5 years ago

That being said, it will be VERY difficult to handle every possible case where an extension could cause us to break. But we can do our best for the common cases.