diff options
| author | Jon Ashburn <jon@lunarg.com> | 2015-03-17 13:47:55 -0600 |
|---|---|---|
| committer | Chia-I Wu <olv@lunarg.com> | 2015-04-16 17:33:25 +0800 |
| commit | 9e6ea0b695669545e92326987787a36c1bf231ff (patch) | |
| tree | 107127929d4696df4f0e549ad74b5e668c5f28f2 | |
| parent | e27c32e6490ec5cdde16ab2181bff9b5ab0abc56 (diff) | |
| download | usermoji-9e6ea0b695669545e92326987787a36c1bf231ff.tar.xz | |
loader: Fix Dbg entrypoints with instance param to not loop all instances
DbgRegisterMsgCallback, DbgUnregisterMsgCallback, DbgSetGlobalOption were all
making these calls for all instances rather than just instance passed in as
parameter.
| -rw-r--r-- | loader/loader.c | 85 |
1 files changed, 47 insertions, 38 deletions
diff --git a/loader/loader.c b/loader/loader.c index bfc5ef00..4dafc223 100644 --- a/loader/loader.c +++ b/loader/loader.c @@ -1100,31 +1100,33 @@ LOADER_EXPORT XGL_RESULT XGLAPI xglDbgRegisterMsgCallback(XGL_INSTANCE instance, assert(loader.icds_scanned); for (inst = loader.instances; inst; inst = inst->next) { - for (icd = inst->icds; icd; icd = icd->next) { - for (uint32_t i = 0; i < icd->gpu_count; i++) { - res = (icd->loader_dispatch + i)->DbgRegisterMsgCallback(icd->scanned_icds->instance, + if (inst == instance) + break; + } + + if (inst == XGL_NULL_HANDLE) + return XGL_ERROR_INVALID_HANDLE; + + for (icd = inst->icds; icd; icd = icd->next) { + for (uint32_t i = 0; i < icd->gpu_count; i++) { + res = (icd->loader_dispatch + i)->DbgRegisterMsgCallback(icd->scanned_icds->instance, pfnMsgCallback, pUserData); - if (res != XGL_SUCCESS) { - gpu_idx = i; - break; - } - } - if (res != XGL_SUCCESS) + if (res != XGL_SUCCESS) { + gpu_idx = i; break; + } } if (res != XGL_SUCCESS) break; } + /* roll back on errors */ if (icd) { - for (struct loader_instance *tmp_inst = loader.instances; - tmp_inst != inst; tmp_inst = tmp_inst->next) { - for (const struct loader_icd * tmp = tmp_inst->icds; tmp != icd; + for (const struct loader_icd *tmp = inst->icds; tmp != icd; tmp = tmp->next) { - for (uint32_t i = 0; i < icd->gpu_count; i++) - (tmp->loader_dispatch + i)->DbgUnregisterMsgCallback(tmp->scanned_icds->instance, pfnMsgCallback); - } + for (uint32_t i = 0; i < icd->gpu_count; i++) + (tmp->loader_dispatch + i)->DbgUnregisterMsgCallback(tmp->scanned_icds->instance, pfnMsgCallback); } /* and gpus on current icd */ for (uint32_t i = 0; i < gpu_idx; i++) @@ -1139,22 +1141,26 @@ LOADER_EXPORT XGL_RESULT XGLAPI xglDbgRegisterMsgCallback(XGL_INSTANCE instance, LOADER_EXPORT XGL_RESULT XGLAPI xglDbgUnregisterMsgCallback(XGL_INSTANCE instance, XGL_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback) { XGL_RESULT res = XGL_SUCCESS; - + struct loader_instance *inst; if (instance == XGL_NULL_HANDLE) return XGL_ERROR_INVALID_HANDLE; assert(loader.icds_scanned); - for (struct loader_instance *inst = loader.instances; inst; - inst = inst->next) { - for (const struct loader_icd * icd = inst->icds; icd; - icd = icd->next) { - for (uint32_t i = 0; i < icd->gpu_count; i++) { - XGL_RESULT r; - r = (icd->loader_dispatch + i)->DbgUnregisterMsgCallback(icd->scanned_icds->instance, pfnMsgCallback); - if (r != XGL_SUCCESS) { - res = r; - } + for (inst = loader.instances; inst; inst = inst->next) { + if (inst == instance) + break; + } + + if (inst == XGL_NULL_HANDLE) + return XGL_ERROR_INVALID_HANDLE; + + for (const struct loader_icd * icd = inst->icds; icd; icd = icd->next) { + for (uint32_t i = 0; i < icd->gpu_count; i++) { + XGL_RESULT r; + r = (icd->loader_dispatch + i)->DbgUnregisterMsgCallback(icd->scanned_icds->instance, pfnMsgCallback); + if (r != XGL_SUCCESS) { + res = r; } } } @@ -1164,24 +1170,27 @@ LOADER_EXPORT XGL_RESULT XGLAPI xglDbgUnregisterMsgCallback(XGL_INSTANCE instanc LOADER_EXPORT XGL_RESULT XGLAPI xglDbgSetGlobalOption(XGL_INSTANCE instance, XGL_DBG_GLOBAL_OPTION dbgOption, size_t dataSize, const void* pData) { XGL_RESULT res = XGL_SUCCESS; - + struct loader_instance *inst; if (instance == XGL_NULL_HANDLE) return XGL_ERROR_INVALID_HANDLE; assert(loader.icds_scanned); - for (struct loader_instance *inst = loader.instances; inst; - inst = inst->next) { - for (const struct loader_icd * icd = inst->icds; icd; - icd = icd->next) { - for (uint32_t i = 0; i < icd->gpu_count; i++) { - XGL_RESULT r; - r = (icd->loader_dispatch + i)->DbgSetGlobalOption(icd->scanned_icds->instance, dbgOption, + for (inst = loader.instances; inst; inst = inst->next) { + if (inst == instance) + break; + } + + if (inst == XGL_NULL_HANDLE) + return XGL_ERROR_INVALID_HANDLE; + for (const struct loader_icd * icd = inst->icds; icd; icd = icd->next) { + for (uint32_t i = 0; i < icd->gpu_count; i++) { + XGL_RESULT r; + r = (icd->loader_dispatch + i)->DbgSetGlobalOption(icd->scanned_icds->instance, dbgOption, dataSize, pData); - /* unfortunately we cannot roll back */ - if (r != XGL_SUCCESS) { - res = r; - } + /* unfortunately we cannot roll back */ + if (r != XGL_SUCCESS) { + res = r; } } } |
