yum-mirror/slang

Making it easier to work with shaders

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

Ellie Hermaszewskaformatf65d756bf

master
1.8 KiB69 linesraw
1// cuda-command-queue.h
2#pragma once
3#include "cuda-base.h"
4#include "cuda-device.h"
5#include "cuda-helper-functions.h"
6#include "cuda-pipeline-state.h"
7#include "cuda-shader-object.h"
8
9namespace gfx
10{
11#ifdef GFX_ENABLE_CUDA
12using namespace Slang;
13
14namespace cuda
15{
16
17class CommandQueueImpl : public ICommandQueue, public ComObject
18{
19public:
20    SLANG_COM_OBJECT_IUNKNOWN_ALL
21    ICommandQueue* getInterface(const Guid& guid);
22
23    RefPtr<ComputePipelineStateImpl> currentPipeline;
24    RefPtr<RootShaderObjectImpl> currentRootObject;
25    RefPtr<DeviceImpl> renderer;
26    CUstream stream;
27    Desc m_desc;
28
29    void init(DeviceImpl* inRenderer);
30    ~CommandQueueImpl();
31
32    virtual SLANG_NO_THROW const Desc& SLANG_MCALL getDesc() override { return m_desc; }
33
34    virtual SLANG_NO_THROW void SLANG_MCALL executeCommandBuffers(
35        GfxCount count,
36        ICommandBuffer* const* commandBuffers,
37        IFence* fence,
38        uint64_t valueToSignal) override;
39
40    virtual SLANG_NO_THROW void SLANG_MCALL waitOnHost() override;
41
42    virtual SLANG_NO_THROW Result SLANG_MCALL
43    waitForFenceValuesOnDevice(GfxCount fenceCount, IFence** fences, uint64_t* waitValues) override;
44
45    virtual SLANG_NO_THROW Result SLANG_MCALL getNativeHandle(InteropHandle* outHandle) override;
46
47    void setPipelineState(IPipelineState* state);
48
49    Result bindRootShaderObject(IShaderObject* object);
50
51    void dispatchCompute(int x, int y, int z);
52
53    void copyBuffer(
54        IBufferResource* dst,
55        size_t dstOffset,
56        IBufferResource* src,
57        size_t srcOffset,
58        size_t size);
59
60    void uploadBufferData(IBufferResource* dst, size_t offset, size_t size, void* data);
61
62    void writeTimestamp(IQueryPool* pool, SlangInt index);
63
64    void execute(CommandBufferImpl* commandBuffer);
65};
66
67} // namespace cuda
68#endif
69} // namespace gfx