Conversation
db7abd8 to
4628883
Compare
|
@fabian-lunarg , @davidd-lunarg, @locke-lunarg |
fa33340 to
34a18be
Compare
| ¶meter_stream_); | ||
| parameter_stream_.Clear(); | ||
|
|
||
| StandardCreateWrite(wrapper); |
There was a problem hiding this comment.
Here create a new blob and write this blob. This new blob should be used for CreateRootSignature, but StandardCreateWrite(wrapper); seems to still write the original blob. I feel it should write the new blob for it. Or do both GetBufferPointer() are the same because they have the same blob_value?
There was a problem hiding this comment.
Plus, in Encode_ID3D12Device_CreateRootSignature, it writes all ID3D10Blob data by encoder->EncodeVoidArray(pBlobWithRootSignature, blobLengthInBytes);. It seems to be not necessary to create ID3D10Blob again. Why does it write D3D12SerializeVersionedRootSignature, ID3D10Blob_GetBufferSize, ID3D10Blob_GetBufferPointer? Or is it just for recording the complete process, not for correctly executing the program?
There was a problem hiding this comment.
Here create a new blob and write this blob. This new blob should be used for CreateRootSignature, but
StandardCreateWrite(wrapper);seems to still write the original blob. I feel it should write the new blob for it. Or do both GetBufferPointer() are the same because they have the sameblob_value?
I believe the blob data is the same at runtime and does not need to be updated.
There was a problem hiding this comment.
Plus, in
Encode_ID3D12Device_CreateRootSignature, it writes all ID3D10Blob data byencoder->EncodeVoidArray(pBlobWithRootSignature, blobLengthInBytes);. It seems to be not necessary to create ID3D10Blob again. Why does it writeD3D12SerializeVersionedRootSignature,ID3D10Blob_GetBufferSize,ID3D10Blob_GetBufferPointer? Or is it just for recording the complete process, not for correctly executing the program?
I'm not sure if the captured blob data on replaying different GPU is the same. However, I haven't adapted the replay code yet.
There was a problem hiding this comment.
Replay works fine on different GPUs, so this looks good.
My question is: since the capture already writes all the ID3D10Blob data, omitting the creation calls shouldn't hurt. Why do we explicitly record D3D12SerializeVersionedRootSignature, ID3D10Blob_GetBufferSize, and ID3D10Blob_GetBufferPointer?
Does it affect replay correctness, or is it to record the full process to help users identify which ID3D10Blob is being used? I’m happy to keep it for completeness, just want to understand the intent. Thanks!
1. Fixed a crash where the `OpenExistingHeapFromFileMapping` and `OpenExistingHeapFromAddress1` methods were missing. 2. Fixed an issue where the `SetPrivateDataInterface` method was missing during trimming. 3. Fixed a reference count error in the private data interface, causing a replay crash when releasing resource objects. 4. Fixed an issue with ID3D10Blob trimmed capture: the ID3D10Blob creation command released it in tracking state, not written to the trimmed file. 5. Fixed the heap flags with D3D12_HEAP_FLAG_ALLOW_WRITE_WATCH using UseWriteWatch. 6. Updated the `clang-format` code.
34a18be to
4a824cf
Compare
|
The error in |
OpenExistingHeapFromFileMappingandOpenExistingHeapFromAddress1methods were missing.SetPrivateDataInterfacemethod was missing during trimming.clang-formatcode.Track in #2843