yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
f65d756bf
master
1// cpu-device.h 2#pragma once 3#include "cpu-base.h" 4#include "cpu-pipeline-state.h" 5#include "cpu-shader-object.h" 6 7namespace gfx 8{ 9using namespace Slang ; 10 11namespace cpu 12{ 13 14class DeviceImpl :public ImmediateComputeDeviceBase 15{ 16public : 17 ~DeviceImpl (); 18 19virtual SLANG_NO_THROW SlangResult SLANG_MCALL initialize (const Desc & desc )override ; 20 21virtual SLANG_NO_THROW Result SLANG_MCALL createTextureResource ( 22const ITextureResource ::Desc & desc , 23const ITextureResource ::SubresourceData * initData , 24ITextureResource ** outResource )override ; 25 26virtual SLANG_NO_THROW Result SLANG_MCALL createBufferResource ( 27const IBufferResource ::Desc & descIn , 28const void * initData , 29IBufferResource ** outResource )override ; 30 31virtual SLANG_NO_THROW Result SLANG_MCALL createTextureView ( 32ITextureResource * inTexture , 33IResourceView ::Desc const & desc , 34IResourceView ** outView )override ; 35 36virtual SLANG_NO_THROW Result SLANG_MCALL createBufferView ( 37IBufferResource * inBuffer , 38IBufferResource * counterBuffer , 39IResourceView ::Desc const & desc , 40IResourceView ** outView )override ; 41 42virtual Result createShaderObjectLayout ( 43slang ::ISession * session , 44slang ::TypeLayoutReflection * typeLayout , 45ShaderObjectLayoutBase ** outLayout )override ; 46 47virtual Result createShaderObject (ShaderObjectLayoutBase * layout ,IShaderObject ** outObject ) 48override ; 49 50virtual Result createMutableShaderObject ( 51ShaderObjectLayoutBase * layout , 52IShaderObject ** outObject )override ; 53 54virtual Result createRootShaderObject (IShaderProgram * program ,ShaderObjectBase ** outObject ) 55override ; 56 57virtual SLANG_NO_THROW Result SLANG_MCALL createProgram ( 58const IShaderProgram ::Desc & desc , 59IShaderProgram ** outProgram , 60ISlangBlob ** outDiagnosticBlob )override ; 61 62virtual SLANG_NO_THROW Result SLANG_MCALL createComputePipelineState ( 63const ComputePipelineStateDesc & desc , 64IPipelineState ** outState )override ; 65 66virtual SLANG_NO_THROW Result SLANG_MCALL 67createQueryPool (const IQueryPool ::Desc & desc ,IQueryPool ** outPool )override ; 68 69virtual void writeTimestamp (IQueryPool * pool ,GfxIndex index )override ; 70 71virtual SLANG_NO_THROW const DeviceInfo & SLANG_MCALL getDeviceInfo ()const override ; 72 73virtual SLANG_NO_THROW Result SLANG_MCALL 74createSamplerState( ISamplerState :: Desc const & desc , ISamplerState ** outSampler ) override; 75 76virtual void submitGpuWork () override {} 77virtual void waitForGpu () override {} 78virtual void * map ( IBufferResource * buffer, MapFlavor flavor) override; 79virtual void unmap ( IBufferResource * buffer, size_t offsetWritten, size_t sizeWritten) override; 80 81private : 82RefPtr < PipelineStateImpl > m_currentPipeline = nullptr ; 83RefPtr < RootShaderObjectImpl > m_currentRootObject = nullptr ; 84DeviceInfo m_info; 85 86virtual void setPipelineState ( IPipelineState * state) override; 87 88virtual void bindRootShaderObject ( IShaderObject * object) override; 89 90virtual void dispatchCompute ( int x, int y, int z) override; 91 92virtual void copyBuffer ( 93IBufferResource * dst, 94size_t dstOffset, 95IBufferResource * src, 96size_t srcOffset, 97size_t size) override; 98}; 99 100} // namespace cpu 101 102Result SLANG_MCALL createCPUDevice ( const IDevice ::Desc * desc, IDevice ** outDevice); 103 104} // namespace gfx