AMD_DBGAPI
0.31.0
|
Operations related to AMD GPU waves. More...
Data Structures | |
struct | amd_dbgapi_wave_id_t |
Opaque wave handle. More... | |
Macros | |
#define | AMD_DBGAPI_WAVE_NONE (amd_dbgapi_wave_id_t{ 0 }) |
The NULL wave handle. More... | |
Functions | |
amd_dbgapi_status_t AMD_DBGAPI | amd_dbgapi_wave_get_info (amd_dbgapi_process_id_t process_id, amd_dbgapi_wave_id_t wave_id, amd_dbgapi_wave_info_t query, size_t value_size, void *value) AMD_DBGAPI_VERSION_0_30 |
Query information about a wave. More... | |
amd_dbgapi_status_t AMD_DBGAPI | amd_dbgapi_wave_list (amd_dbgapi_process_id_t process_id, size_t *wave_count, amd_dbgapi_wave_id_t **waves, amd_dbgapi_changed_t *changed) AMD_DBGAPI_VERSION_0_24 |
Return the list of existing waves for a process. More... | |
amd_dbgapi_status_t AMD_DBGAPI | amd_dbgapi_wave_stop (amd_dbgapi_process_id_t process_id, amd_dbgapi_wave_id_t wave_id) AMD_DBGAPI_VERSION_0_24 |
Request a wave to stop executing. More... | |
amd_dbgapi_status_t AMD_DBGAPI | amd_dbgapi_wave_resume (amd_dbgapi_process_id_t process_id, amd_dbgapi_wave_id_t wave_id, amd_dbgapi_resume_mode_t resume_mode) AMD_DBGAPI_VERSION_0_24 |
Resume execution of a stopped wave. More... | |
Operations related to AMD GPU waves.
#define AMD_DBGAPI_WAVE_NONE (amd_dbgapi_wave_id_t{ 0 }) |
The NULL wave handle.
Wave queries that are supported by amd_dbgapi_wave_get_info.
Each query specifies the type of data returned in the value
argument to amd_dbgapi_wave_get_info.
Enumerator | |
---|---|
AMD_DBGAPI_WAVE_INFO_STATE | Return the wave's state. The type of this attribute is |
AMD_DBGAPI_WAVE_INFO_STOP_REASON | Return the reason the wave stopped as a bit set. The type of this attribute is |
AMD_DBGAPI_WAVE_INFO_WATCHPOINTS | Return the watchpoint(s) the wave triggered. The type of this attribute is amd_dbgapi_watchpoint_list_t. The amd_dbgapi_watchpoint_list_t::count field is set to the number of watchpoints that were triggered. The amd_dbgapi_watchpoint_list_t::watchpoint_ids field is set to a pointer to an array of amd_dbgapi_watchpoint_id_t with amd_dbgapi_watchpoint_list_t::count elements comprising the triggered watchpoint handles. The array is allocated by the amd_dbgapi_callbacks_s::allocate_memory callback and is owned by the client. The wave must be stopped to make this query. |
AMD_DBGAPI_WAVE_INFO_DISPATCH | Return the dispatch to which this wave belongs. The type of this attribute is amd_dbgapi_dispatch_id_t. If the dispatch associated with a wave is not available then AMD_DBGAPI_DISPATCH_NONE is returned. If a wave has no associated dispatch then the the AMD_DBGAPI_WAVE_INFO_WORK_GROUP_COORD query may return incorrect information. Note that a wave may not have an associated dispatch if attaching to a process with already existing waves. |
AMD_DBGAPI_WAVE_INFO_QUEUE | Return the queue to which this wave belongs. The type of this attribute is amd_dbgapi_queue_id_t. |
AMD_DBGAPI_WAVE_INFO_AGENT | Return the agent to which this wave belongs. The type of this attribute is amd_dbgapi_agent_id_t. |
AMD_DBGAPI_WAVE_INFO_ARCHITECTURE | Return the architecture of this wave. The type of this attribute is amd_dbgapi_architecture_id_t. |
AMD_DBGAPI_WAVE_INFO_PC | Return the current program counter value of the wave. The type of this attribute is amd_dbgapi_global_address_t. The wave must be stopped to make this query. |
AMD_DBGAPI_WAVE_INFO_EXEC_MASK | Return the current execution mask of the wave. Each bit of the mask maps to a lane with the least significant bit corresponding to the lane with a amd_dbgapi_lane_id_t value of 0 and so forth. If the bit is 1 then the lane is active, otherwise the lane is not active. The type of this attribute is |
AMD_DBGAPI_WAVE_INFO_WORK_GROUP_COORD | The wave workgroup coordinate in the dispatch grid dimensions. The type of this attribute is |
AMD_DBGAPI_WAVE_INFO_WAVE_NUMBER_IN_WORK_GROUP | The wave's number in the workgroup. The type of this attribute is |
AMD_DBGAPI_WAVE_INFO_LANE_COUNT | The number of lanes supported by the wave. The type of this attribute is |
The execution state of a wave.
Enumerator | |
---|---|
AMD_DBGAPI_WAVE_STATE_RUN | The wave is running. |
AMD_DBGAPI_WAVE_STATE_SINGLE_STEP | The wave is running in single-step mode. It will execute a single instruction and then stop. |
AMD_DBGAPI_WAVE_STATE_STOP | The wave is stopped. Note that a wave may stop at any time due to the instructions it executes or because the queue it is executing on enters the error state. This will cause a AMD_DBGAPI_EVENT_KIND_WAVE_STOP event to be created. However, until amd_dbgapi_next_pending_event returns the event, the wave will continue to be reported as in the AMD_DBGAPI_WAVE_STATE_RUN state. Only when the AMD_DBGAPI_EVENT_KIND_WAVE_STOP event is returned by amd_dbgapi_next_pending_event will the wave will be reported in the AMD_DBGAPI_WAVE_STATE_STOP state. |
A bit mask of the reasons that a wave stopped.
The stop reason of a wave is available using the AMD_DBGAPI_WAVE_INFO_STOP_REASON query.
Enumerator | |
---|---|
AMD_DBGAPI_WAVE_STOP_REASON_NONE | If none of the bits are set, then amd_dbgapi_wave_stop stopped the wave. |
AMD_DBGAPI_WAVE_STOP_REASON_BREAKPOINT | The wave stopped due to executing a breakpoint instruction. Use the AMD_DBGAPI_ARCHITECTURE_INFO_BREAKPOINT_INSTRUCTION_PC_ADJUST query to determine the address of the breakpoint instruction. |
AMD_DBGAPI_WAVE_STOP_REASON_WATCHPOINT | The wave stopped due to triggering a data watchpoint. The AMD_DBGAPI_WAVE_INFO_WATCHPOINTS query can be used to determine which watchpoint(s) were triggered. The program counter may not be positioned at the instruction that caused the watchpoint(s) to be triggered as the AMD GPU can continue executing instructions after initiating a memory operation. If the architecture supports it, the amd_dbgapi_set_memory_precision can be used to control the precision, but may significantly reduce performance. |
AMD_DBGAPI_WAVE_STOP_REASON_SINGLE_STEP | The wave stopped due to completing an instruction single-step. |
AMD_DBGAPI_WAVE_STOP_REASON_QUEUE_ERROR | The wave belongs to a queue that is in the error state. This is set in both waves that were stopped due to a queue error, as well as waves that were already stopped when the queue went into the queue error state. A wave that includes this stop reason cannot be resumed using amd_dbgapi_wave_resume. The wave's queue will be in the queue error state. |
AMD_DBGAPI_WAVE_STOP_REASON_FP_INPUT_DENORMAL | The wave stopped due to triggering an enabled floating point input denormal exception. |
AMD_DBGAPI_WAVE_STOP_REASON_FP_DIVIDE_BY_0 | The wave stopped due to triggering an enabled floating point divide by zero exception. |
AMD_DBGAPI_WAVE_STOP_REASON_FP_OVERFLOW | The wave stopped due to triggering an enabled floating point overflow exception. |
AMD_DBGAPI_WAVE_STOP_REASON_FP_UNDERFLOW | The wave stopped due to triggering an enabled floating point underflow exception. |
AMD_DBGAPI_WAVE_STOP_REASON_FP_INEXACT | The wave stopped due to triggering an enabled floating point inexact exception. |
AMD_DBGAPI_WAVE_STOP_REASON_FP_INVALID_OPERATION | The wave stopped due to triggering an enabled floating point invalid operation exception. |
AMD_DBGAPI_WAVE_STOP_REASON_INT_DIVIDE_BY_0 | The wave stopped due to triggering an enabled integer divide by zero exception. |
AMD_DBGAPI_WAVE_STOP_REASON_DEBUG_TRAP | The wave stopped due to executing a debug trap instruction. The program counter is left positioned after the trap instruction. The wave can be resumed using amd_dbgapi_wave_resume. The debug trap instruction can be generated using the A debug trap can be used to explicitly insert stop points in a program to help debugging. They behave as no operations if a debugger is not connected and stop the wave if executed with the debugger attached. |
AMD_DBGAPI_WAVE_STOP_REASON_ASSERT_TRAP | The wave stopped due to executing an assert trap instruction. The program counter is left positioned at the assert trap instruction. The trap instruction can be generated using the An assert trap can be used to abort the execution of the dispatches executing on a queue. A wave that includes this stop reason cannot be resumed using amd_dbgapi_wave_resume. The wave's queue will enter the queue error state and include the AMD_DBGAPI_QUEUE_ERROR_REASON_ASSERT_TRAP queue error reason. |
AMD_DBGAPI_WAVE_STOP_REASON_TRAP | The wave stopped due to executing an trap instruction other than the AMD_DBGAPI_WAVE_STOP_REASON_DEBUG_TRAP or AMD_DBGAPI_WAVE_STOP_REASON_ASSERT_TRAP trap instruction. The program counter is left positioned at the trap instruction. A wave that includes this stop reason cannot be resumed using amd_dbgapi_wave_resume. The wave's queue will enter the queue error state and include the AMD_DBGAPI_QUEUE_ERROR_REASON_WAVE_ERROR queue error reason. |
AMD_DBGAPI_WAVE_STOP_REASON_MEMORY_VIOLATION | The wave stopped due to triggering a memory violation. The program counter may not be positioned at the instruction that caused the memory violation as the AMD GPU can continue executing instructions after initiating a memory operation. If the architecture supports it, the amd_dbgapi_set_memory_precision can be used to control the precision, but may significantly reduce performance. A wave that includes this stop reason cannot be resumed using amd_dbgapi_wave_resume. The wave's queue will enter the queue error state and include the AMD_DBGAPI_QUEUE_ERROR_REASON_MEMORY_VIOLATION queue error reason. |
AMD_DBGAPI_WAVE_STOP_REASON_ILLEGAL_INSTRUCTION | The wave stopped due to executing an illegal instruction. The program counter is left positioned at the illegal instruction. A wave that includes this stop reason cannot be resumed using amd_dbgapi_wave_resume. The wave's queue will enter the queue error state and include the AMD_DBGAPI_QUEUE_ERROR_REASON_WAVE_ERROR queue error reason. |
AMD_DBGAPI_WAVE_STOP_REASON_ECC_ERROR | The wave stopped due to detecting an unrecoverable ECC error. The program counter may not be positioned at the instruction that caused the memory violation as the AMD GPU can continue executing instructions after initiating a memory operation. If the architecture supports it, the amd_dbgapi_set_memory_precision can be used to control the precision, but may significantly reduce performance. A wave that includes this stop reason cannot be resumed using amd_dbgapi_wave_resume. The wave's queue will enter the queue error state and include the AMD_DBGAPI_QUEUE_ERROR_REASON_WAVE_ERROR queue error reason. |
AMD_DBGAPI_WAVE_STOP_REASON_FATAL_HALT | The wave stopped after causing a hardware fatal halt. A wave that includes this stop reason cannot be resumed using amd_dbgapi_wave_resume. The wave's queue will enter the queue error state and include the AMD_DBGAPI_QUEUE_ERROR_REASON_WAVE_ERROR queue error reason. |
AMD_DBGAPI_WAVE_STOP_REASON_XNACK_ERROR | The wave stopped with an XNACK error. A wave that includes this stop reason cannot be resumed using amd_dbgapi_wave_resume. The wave's queue will enter the queue error state and include the AMD_DBGAPI_QUEUE_ERROR_REASON_WAVE_ERROR queue error reason. |
AMD_DBGAPI_WAVE_STOP_REASON_RESERVED | A reserved value only present to ensure that the underlying representation of this enumeration type is |
amd_dbgapi_status_t AMD_DBGAPI amd_dbgapi_wave_get_info | ( | amd_dbgapi_process_id_t | process_id, |
amd_dbgapi_wave_id_t | wave_id, | ||
amd_dbgapi_wave_info_t | query, | ||
size_t | value_size, | ||
void * | value | ||
) |
Query information about a wave.
amd_dbgapi_wave_info_t specifies the queries supported and the type returned using the value
argument.
[in] | process_id | The process to which the queue belongs. |
[in] | wave_id | The handle of the wave being queried. |
[in] | query | The query being requested. |
[in] | value_size | Size of the memory pointed to by value . Must be equal to the byte size of the query result. |
[out] | value | Pointer to memory where the query result is stored. |
AMD_DBGAPI_STATUS_SUCCESS | The function has been executed successfully and the result is stored in value . |
AMD_DBGAPI_STATUS_FATAL | A fatal error occurred. The library is left uninitialized and value is unaltered. |
AMD_DBGAPI_STATUS_ERROR_NOT_INITIALIZED | The library is not initialized. The library is left uninitialized and value is unaltered. |
AMD_DBGAPI_STATUS_ERROR_INVALID_PROCESS_ID | process_id is invalid. value is unaltered. |
AMD_DBGAPI_STATUS_ERROR_INVALID_WAVE_ID | wave_id is invalid. value is unaltered. |
AMD_DBGAPI_STATUS_ERROR_INVALID_ARGUMENT | value is NULL or query is invalid. value is unaltered. |
AMD_DBGAPI_STATUS_ERROR_INVALID_ARGUMENT_SIZE | value_size does not match the size of the result. value is unaltered. |
AMD_DBGAPI_STATUS_ERROR_WAVE_NOT_STOPPED | query has a value of amd_dbgapi_wave_info_t that requires the wave to be stopped, but the wave is not stopped. |
AMD_DBGAPI_STATUS_ERROR_CLIENT_CALLBACK | This will be reported if the amd_dbgapi_callbacks_s::allocate_memory callback used to allocate value returns NULL. value is unaltered. |
amd_dbgapi_status_t AMD_DBGAPI amd_dbgapi_wave_list | ( | amd_dbgapi_process_id_t | process_id, |
size_t * | wave_count, | ||
amd_dbgapi_wave_id_t ** | waves, | ||
amd_dbgapi_changed_t * | changed | ||
) |
Return the list of existing waves for a process.
The order of the wave handles in the list is unspecified and can vary between calls.
[in] | process_id | The process for which the wave list is requested. |
[out] | wave_count | The number of waves executing in the process. |
[out] | waves | If changed is not NULL and the wave list has not changed since the last call to amd_dbgapi_wave_list then return NULL. Otherwise, return a pointer to an array of amd_dbgapi_wave_id_t with wave_count elements. It is allocated by the amd_dbgapi_callbacks_s::allocate_memory callback and is owned by the client. |
[in,out] | changed | If NULL then left unaltered. If non-NULL, set to AMD_DBGAPI_CHANGED_NO if the list of waves is the same as when amd_dbgapi_wave_list was last called, otherwise set to AMD_DBGAPI_CHANGED_YES. |
AMD_DBGAPI_STATUS_SUCCESS | The function has been executed successfully and the result is stored in changed , wave_count , and waves . |
AMD_DBGAPI_STATUS_FATAL | A fatal error occurred. The library is left uninitialized; and changed , wave_count , and waves are unaltered. |
AMD_DBGAPI_STATUS_ERROR_NOT_INITIALIZED | The library is not initialized. The library is left uninitialized; and wave_count , waves , and changed are unaltered. |
AMD_DBGAPI_STATUS_ERROR_INVALID_PROCESS_ID | process_id is invalid. wave_count , waves , and unchanged are unaltered. |
AMD_DBGAPI_STATUS_ERROR_INVALID_ARGUMENT | wave_count or waves are NULL, or changed is invalid. wave_count , waves , and changed are unaltered. |
AMD_DBGAPI_STATUS_ERROR_CLIENT_CALLBACK | This will be reported if the amd_dbgapi_callbacks_s::allocate_memory callback used to allocate waves returns NULL. wave_count , waves , and changed are unaltered. |
amd_dbgapi_status_t AMD_DBGAPI amd_dbgapi_wave_resume | ( | amd_dbgapi_process_id_t | process_id, |
amd_dbgapi_wave_id_t | wave_id, | ||
amd_dbgapi_resume_mode_t | resume_mode | ||
) |
Resume execution of a stopped wave.
The wave can be resumed normally in which case it will be in the AMD_DBGAPI_WAVE_STATE_RUN state and be available for the hardware to execute instructions. Just because it is in the run state does not mean the hardware will start executing instructions immediately as that depends on the AMD GPU hardware scheduler.
If while in the AMD_DBGAPI_WAVE_STATE_RUN state, the wave encounters something that stops its execution, or amd_dbgapi_wave_stop is used to stop the wave execution, then a AMD_DBGAPI_EVENT_KIND_WAVE_STOP event will be created.
If while in the AMD_DBGAPI_WAVE_STATE_RUN state the wave terminates, no event is created.
The wave can be resumed in single step mode in which case it will be in the AMD_DBGAPI_WAVE_STATE_SINGLE_STEP state. It is available for the hardware to execute one instruction. After completing execution of a regular instruction, a AMD_DBGAPI_EVENT_KIND_WAVE_STOP event will be created that indicates the wave has stopped. The stop reason of the wave will include AMD_DBGAPI_WAVE_STOP_REASON_SINGLE_STEP. After completing execution of a wave termination instruction, a AMD_DBGAPI_EVENT_KIND_WAVE_COMMAND_TERMINATED event will be created that indicates that the wave has terminated. On some architectures, a single step that completes with the wave positioned at a wave termination instruction may also report the AMD_DBGAPI_EVENT_KIND_WAVE_COMMAND_TERMINATED event.
Resuming a wave in single step mode does not necessarily cause it to execute any instructions as it is up to the AMD GPU hardware scheduler to decide what waves to execute. For example, the AMD GPU hardware scheduler may not execute any instructions of a wave until other waves have terminated. If the client has stopped other waves this can prevent a wave from ever performing a single step. The client should handle this gracefully and not rely on a single step request always resulting in a AMD_DBGAPI_EVENT_KIND_WAVE_STOP event. If necessary, the client should respond to the stop events of other waves to allow them to make forward progress, and handle the single step stop request when it finally arrives. If necessary, the client can cancel the single step request by using amd_dbgapi_wave_stop and allow the user to attempt it again later when other waves have terminated.
It is an error to resume a wave that has terminated. The wave handle will be reported as invalid. It is up to the client to use amd_dbgapi_wave_list to determine what waves have been created and terminated. No event is reported when a wave is created or terminates.
It is an error to request a wave to resume that is not in the AMD_DBGAPI_WAVE_STATE_STOP state, or is in the AMD_DBGAPI_WAVE_STATE_STOP state but the AMD_DBGAPI_EVENT_KIND_WAVE_STOP event that put it in the stop state has not yet been completed using the amd_dbgapi_event_processed operation. Therefore, it is not allowed to execute multiple resume requests as all but the first one will give an error.
It also means it is an error to resume a wave that has already stopped, but whose AMD_DBGAPI_EVENT_KIND_WAVE_STOP event has not yet been returned by amd_dbgapi_next_pending_event, since the wave is still in the AMD_DBGAPI_WAVE_STATE_RUN state. The AMD_DBGAPI_EVENT_KIND_WAVE_STOP must be processed first.
Since a resume request can only be sent to a wave that has stopped, there is no issue of the wave terminating while making the request. However, the wave may terminate after being resumed. Except for single stepping the wave termination instruction described above, no event is reported when the wave terminates.
Sending a resume request to a wave that includes a stop reason that cannot be resumed will report an error. See amd_dbgapi_wave_stop_reason_t.
[in] | process_id | The process to which the wave belongs. |
[in] | wave_id | The wave being requested to resume. |
[in] | resume_mode | If AMD_DBGAPI_RESUME_MODE_NORMAL, then resume normal execution of the wave. If AMD_DBGAPI_RESUME_MODE_SINGLE_STEP, then resume the wave in single step mode. |
AMD_DBGAPI_STATUS_SUCCESS | The function has been executed successfully and the wave will either terminate or be stopped. In either case a AMD_DBGAPI_EVENT_KIND_WAVE_STOP event will be reported. |
AMD_DBGAPI_STATUS_FATAL | A fatal error occurred. The library is left uninitialized. |
AMD_DBGAPI_STATUS_ERROR_NOT_INITIALIZED | The library is not initialized. The library is left uninitialized and no wave is resumed. |
AMD_DBGAPI_STATUS_ERROR_INVALID_PROCESS_ID | process_id is invalid. No wave is resumed. |
AMD_DBGAPI_STATUS_ERROR_INVALID_WAVE_ID | wave_id is invalid. No wave is resumed. |
AMD_DBGAPI_STATUS_ERROR_INVALID_ARGUMENT | resume_mode is invalid. No wave is resumed. |
AMD_DBGAPI_STATUS_ERROR_WAVE_NOT_STOPPED | wave_id is not stopped. The wave remains running. |
AMD_DBGAPI_STATUS_ERROR_WAVE_NOT_RESUMABLE | wave_id is stopped with a reason that includes one that cannot be resumed. |
amd_dbgapi_status_t AMD_DBGAPI amd_dbgapi_wave_stop | ( | amd_dbgapi_process_id_t | process_id, |
amd_dbgapi_wave_id_t | wave_id | ||
) |
Request a wave to stop executing.
The wave may or may not immediately stop. If the wave does not immediately stop, the stop request is termed outstanding until the wave does stop or the wave terminates before stopping. When the wave does stop it will create a AMD_DBGAPI_EVENT_KIND_WAVE_STOP event. If the wave terminates before stopping it will create a AMD_DBGAPI_EVENT_KIND_WAVE_COMMAND_TERMINATED event.
A process in the AMD_DBGAPI_PROGRESS_NO_FORWARD progress mode will report the AMD_DBGAPI_EVENT_KIND_WAVE_STOP or AMD_DBGAPI_EVENT_KIND_WAVE_COMMAND_TERMINATED event. It is not necessary to change the progress mode to AMD_DBGAPI_PROGRESS_NORMAL for these events to be reported.
It is not necessary for the process AMD_DBGAPI_PROGRESS_NO_FORWARD
It is an error to request a wave to stop that has terminated. The wave handle will be reported as invalid. It is up to the client to use amd_dbgapi_wave_list to determine what waves have been created and terminated. No event is reported when a wave is created or terminates.
It is an error to request a wave to stop that is already in the AMD_DBGAPI_WAVE_STATE_STOP state.
It is an error to request a wave to stop for which there is an outstanding amd_dbgapi_wave_stop request.
Sending a stop request to a wave that has already stopped, but whose AMD_DBGAPI_EVENT_KIND_WAVE_STOP event has not yet been returned by amd_dbgapi_next_pending_event, is allowed since the wave is still in the AMD_DBGAPI_WAVE_STATE_RUN state. In this case the wave is not affected and the already existing AMD_DBGAPI_EVENT_KIND_WAVE_STOP will notify the client that the stop request has completed. The client must be prepared that a wave may stop for other reasons in response to a stop request. It can use the AMD_DBGAPI_WAVE_INFO_STOP_REASON query to determine if there are other reason(s). See AMD_DBGAPI_WAVE_STATE_STOP for more information.
Sending a stop request to a wave that is in the AMD_DBGAPI_WAVE_STATE_SINGLE_STEP state will attempt to stop the wave and either report a AMD_DBGAPI_EVENT_KIND_WAVE_STOP or AMD_DBGAPI_EVENT_KIND_WAVE_COMMAND_TERMINATED event. If the wave did stop, the setting of the AMD_DBGAPI_WAVE_STOP_REASON_SINGLE_STEP stop reason will indicate whether the wave completed the single step. If the single step does complete, but terminates the wave, then AMD_DBGAPI_EVENT_KIND_WAVE_COMMAND_TERMINATED will be reported.
Sending a stop request to a wave that is present at the time of the request, and does stop, will result in a AMD_DBGAPI_EVENT_KIND_WAVE_STOP event.
Sending a stop request to a wave that is present at the time of the request, but terminates before completing the stop request, will result in a AMD_DBGAPI_EVENT_KIND_WAVE_COMMAND_TERMINATED event.
[in] | process_id | The process to which the wave belongs. |
[in] | wave_id | The wave being requested to stop. |
AMD_DBGAPI_STATUS_SUCCESS | The function has been executed successfully and the wave will either report a AMD_DBGAPI_EVENT_KIND_WAVE_STOP or AMD_DBGAPI_EVENT_KIND_WAVE_COMMAND_TERMINATED event. |
AMD_DBGAPI_STATUS_FATAL | A fatal error occurred. The library is left uninitialized. |
AMD_DBGAPI_STATUS_ERROR_NOT_INITIALIZED | The library is not initialized. The library is left uninitialized and no wave is stopped. |
AMD_DBGAPI_STATUS_ERROR_INVALID_PROCESS_ID | process_id is invalid. No wave is stopped. |
AMD_DBGAPI_STATUS_ERROR_INVALID_WAVE_ID | wave_id is invalid. No wave is stopped. |
AMD_DBGAPI_STATUS_ERROR_WAVE_STOPPED | The wave is already stopped. The wave remains stopped. |
AMD_DBGAPI_STATUS_ERROR_WAVE_OUTSTANDING_STOP | The wave already has an outstanding stop request. This stop request is ignored and the previous stop request continues to stop the wave. |