AMD显卡 PerfAPI的用法

#include <AMDGpu/Include/gpu_performance_api/gpu_perf_api.h>
#include <AMDGpu/Include/gpu_performance_api/gpu_perf_api_types.h>
#include <AMDGpu/Include/gpu_performance_api/gpu_perf_api_functions.h>
#include <AMDGpu/Include/gpu_performance_api/gpu_perf_api_function_types.h>
#include <AMDGpu/Include/gpu_performance_api/gpu_perf_api_interface_loader.h>
#include <AMDGpu/Include/gpu_performance_api/gpu_perf_api_counters.h>

GpaApiManager* GpaApiManager::gpa_api_manager_ = nullptr;
GpaFuncTableInfo* gpa_function_table_info = nullptr;
GpaFunctionTable* gpa_function_table      = nullptr;

static bool InitializeGpa(){
    bool ret_val = false;

    HMODULE handle = LoadLibraryA("AMDGpuDll/GPUPerfAPICL-x64.dll");
    if(!handle){
        qDebug() << "load GPUPerfAPICL failed";
        return false;
    }

    handle = LoadLibraryA("AMDGpuDll/GPUPerfAPICounters-x64.dll");
    if(!handle){
        qDebug() << "load GPUPerfAPICL failed";
        return false;
    }

    handle = LoadLibraryA("AMDGpuDll/GPUPerfAPIDX12-x64.dll");
    if(!handle){
        qDebug() << "load GPUPerfAPICL failed";
        return false;
    }

    handle = LoadLibraryA("AMDGpuDll/GPUPerfAPIDXGetAMDDeviceInfo-x64.dll");
    if(!handle){
        qDebug() << "load GPUPerfAPICL failed";
        return false;
    }


    return true;
}

int main()
{
    InitializeGpa();

    bool ret_val = false;
    if(kGpaStatusOk == GpaApiManager::Instance()->LoadApi(kGpaApiDirectx12,L"AMDGpuDll/"))
    {
        gpa_function_table = GpaApiManager::Instance()->GetFunctionTable(kGpaApiDirectx12);

        if (nullptr != gpa_function_table)
        {
            ret_val = kGpaStatusOk == gpa_function_table->GpaInitialize(kGpaInitializeDefaultBit);
        }
    }
    else{
        qDebug() << "failed";
    }

    if(ret_val){
        int gpuCount = 0;

        ID3D12Device* dxd = nullptr;
        dxd = CreateD3D12Device();
        if(!dxd){
            qDebug() << "no d3d";
            return;
        }
        GpaContextId gpaContextId = 0;
        GpaStatus status = gpa_function_table->GpaOpenContext(dxd,kGpaOpenContextDefaultBit,&gpaContextId);
        if(status != kGpaStatusOk){
            qDebug() << "GpaOpenContext error";
            return;
        }
        qDebug() << gpaContextId;

        GpaUInt32 a,b,c,d,e;
        status = gpa_function_table->GpaGetDeviceAndRevisionId(gpaContextId,&a,&b);
        if(status != kGpaStatusOk){
            qDebug() << "GpaGetDeviceAndRevisionId error";
            return;
        }

        GpaSessionId sessionId = 0;
        status = gpa_function_table->GpaCreateSession(gpaContextId,kGpaSessionSampleTypeDiscreteCounter,&sessionId);
        if(status != kGpaStatusOk){
            qDebug() << "GpaCreateSession error";
            return;
        }

        GpaUInt32 gpaNumCounters = 0;
        status = gpa_function_table->GpaGetNumCounters(gpaContextId,&gpaNumCounters);
        if(status != kGpaStatusOk){
            qDebug() << "GpaGetNumCounters error";
            return;
        }
        status =  gpa_function_table->GpaEnableCounter(sessionId,0);
        if(status != kGpaStatusOk){
            qDebug() << "GpaEnableCounter error";
            return;
        }

        status = gpa_function_table->GpaBeginSession(sessionId);
        if(status != kGpaStatusOk){
            qDebug() << "GpaBeginSession error";
            return;
        }

        //gpa_function_table->gpa

        //gpa_function_table->
        GpaUsageType gpaUsageType;
        status = gpa_function_table->GpaGetCounterUsageType(gpaContextId,0,&gpaUsageType);
        if(status != kGpaStatusOk){
            qDebug() << "GpaBeginSession error";
            return;
        }
    }
    return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值