Ejemplo n.º 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;
}
Ejemplo n.º 2
0
Archivo: async.c Proyecto: 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;
}