yum-mirror/slang

Making it easier to work with shaders

git clone https://git.yummers.dev/yum-mirror/slang

Ellie HermaszewskaMove switch statement bodies to their own lines (#5493)b118451e3

master
1.5 KiB63 linesraw
1// d3d11-query.cpp
2#include "d3d11-query.h"
3
4#include "core/slang-process.h"
5
6namespace gfx
7{
8
9using namespace Slang;
10
11namespace d3d11
12{
13
14Result QueryPoolImpl::init(const IQueryPool::Desc& desc, DeviceImpl* device)
15{
16    m_device = device;
17    m_queryDesc.MiscFlags = 0;
18    switch (desc.type)
19    {
20    case QueryType::Timestamp:
21        m_queryDesc.Query = D3D11_QUERY_TIMESTAMP;
22        break;
23    default:
24        return SLANG_E_INVALID_ARG;
25    }
26    m_queries.setCount(desc.count);
27    return SLANG_OK;
28}
29
30ID3D11Query* QueryPoolImpl::getQuery(SlangInt index)
31{
32    if (!m_queries[index])
33        m_device->m_device->CreateQuery(&m_queryDesc, m_queries[index].writeRef());
34    return m_queries[index].get();
35}
36
37SLANG_NO_THROW Result SLANG_MCALL
38QueryPoolImpl::getResult(GfxIndex queryIndex, GfxCount count, uint64_t* data)
39{
40    D3D11_QUERY_DATA_TIMESTAMP_DISJOINT disjointData;
41    while (S_OK != m_device->m_immediateContext->GetData(
42                       m_device->m_disjointQuery,
43                       &disjointData,
44                       sizeof(D3D11_QUERY_DATA_TIMESTAMP_DISJOINT),
45                       0))
46    {
47        Process::sleepCurrentThread(1);
48    }
49    m_device->m_info.timestampFrequency = disjointData.Frequency;
50
51    for (SlangInt i = 0; i < count; i++)
52    {
53        SLANG_RETURN_ON_FAIL(m_device->m_immediateContext->GetData(
54            m_queries[queryIndex + i],
55            data + i,
56            sizeof(uint64_t),
57            0));
58    }
59    return SLANG_OK;
60}
61
62} // namespace d3d11
63} // namespace gfx