示例#1
0
static HRESULT STDMETHODCALLTYPE d3d10_query_GetData(ID3D10Query *iface, void *data, UINT data_size, UINT flags)
{
    struct d3d_query *query = impl_from_ID3D10Query(iface);
    unsigned int wined3d_flags;
    HRESULT hr;

    TRACE("iface %p, data %p, data_size %u, flags %#x.\n", iface, data, data_size, flags);

    if (!data && data_size)
        return E_INVALIDARG;

    wined3d_flags = wined3d_getdata_flags_from_d3d11_async_getdata_flags(flags);

    wined3d_mutex_lock();
    if (!data_size || wined3d_query_get_data_size(query->wined3d_query) == data_size)
    {
        hr = wined3d_query_get_data(query->wined3d_query, data, data_size, wined3d_flags);
        if (hr == WINED3DERR_INVALIDCALL)
            hr = DXGI_ERROR_INVALID_CALL;
    }
    else
    {
        WARN("Invalid data size %u.\n", data_size);
        hr = E_INVALIDARG;
    }
    wined3d_mutex_unlock();

    return hr;
}
示例#2
0
static UINT STDMETHODCALLTYPE d3d10_query_GetDataSize(ID3D10Query *iface)
{
    struct d3d_query *query = impl_from_ID3D10Query(iface);
    unsigned int data_size;

    TRACE("iface %p.\n", iface);

    wined3d_mutex_lock();
    data_size = wined3d_query_get_data_size(query->wined3d_query);
    wined3d_mutex_unlock();

    return data_size;
}
示例#3
0
文件: query.c 项目: AmesianX/RosWine
static DWORD WINAPI IDirect3DQuery9Impl_GetDataSize(IDirect3DQuery9 *iface)
{
    IDirect3DQuery9Impl *This = impl_from_IDirect3DQuery9(iface);
    DWORD ret;

    TRACE("iface %p.\n", iface);

    wined3d_mutex_lock();
    ret = wined3d_query_get_data_size(This->wineD3DQuery);
    wined3d_mutex_unlock();

    return ret;
}
示例#4
0
文件: async.c 项目: AndreRH/wine
static UINT STDMETHODCALLTYPE d3d10_query_GetDataSize(ID3D10Query *iface)
{
    struct d3d_query *query = impl_from_ID3D10Query(iface);
    unsigned int data_size;

    TRACE("iface %p.\n", iface);

    wined3d_mutex_lock();
    data_size = wined3d_query_get_data_size(query->wined3d_query);
    wined3d_mutex_unlock();

    if (query->desc.Query == D3D11_QUERY_PIPELINE_STATISTICS)
        data_size = sizeof(D3D10_QUERY_DATA_PIPELINE_STATISTICS);

    return data_size;
}
示例#5
0
文件: query.c 项目: RPG-7/reactos
static DWORD WINAPI d3d9_query_GetDataSize(IDirect3DQuery9 *iface)
{
    struct d3d9_query *query = impl_from_IDirect3DQuery9(iface);
    enum wined3d_query_type type;
    DWORD ret;

    TRACE("iface %p.\n", iface);

    wined3d_mutex_lock();
    type = wined3d_query_get_type(query->wined3d_query);
    if (type == WINED3D_QUERY_TYPE_TIMESTAMP_DISJOINT)
        ret = sizeof(BOOL);
    else
        ret = wined3d_query_get_data_size(query->wined3d_query);
    wined3d_mutex_unlock();

    return ret;
}
示例#6
0
文件: async.c 项目: AndreRH/wine
static HRESULT STDMETHODCALLTYPE d3d10_query_GetData(ID3D10Query *iface, void *data, UINT data_size, UINT flags)
{
    struct d3d_query *query = impl_from_ID3D10Query(iface);
    D3D11_QUERY_DATA_PIPELINE_STATISTICS d3d11_data;
    void *d3d10_data_pointer = NULL;
    unsigned int wined3d_flags;
    HRESULT hr;

    TRACE("iface %p, data %p, data_size %u, flags %#x.\n", iface, data, data_size, flags);

    if (!data && data_size)
        return E_INVALIDARG;

    if (query->desc.Query == D3D11_QUERY_PIPELINE_STATISTICS
            && data_size == sizeof(D3D10_QUERY_DATA_PIPELINE_STATISTICS))
    {
        data_size = sizeof(D3D11_QUERY_DATA_PIPELINE_STATISTICS);
        d3d10_data_pointer = data;
        data = &d3d11_data;
    }

    wined3d_flags = wined3d_getdata_flags_from_d3d11_async_getdata_flags(flags);

    wined3d_mutex_lock();
    if (!data_size || wined3d_query_get_data_size(query->wined3d_query) == data_size)
    {
        hr = wined3d_query_get_data(query->wined3d_query, data, data_size, wined3d_flags);
        if (hr == WINED3DERR_INVALIDCALL)
            hr = DXGI_ERROR_INVALID_CALL;
    }
    else
    {
        WARN("Invalid data size %u.\n", data_size);
        hr = E_INVALIDARG;
    }
    wined3d_mutex_unlock();

    if (d3d10_data_pointer && hr == S_OK)
        memcpy(d3d10_data_pointer, data, sizeof(D3D10_QUERY_DATA_PIPELINE_STATISTICS));

    return hr;
}