yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
f65d756bf
master
1// cuda-device.h 2#pragma once 3#include "cuda-base.h" 4#include "cuda-command-buffer.h" 5#include "cuda-context.h" 6#include "cuda-helper-functions.h" 7 8namespace gfx 9{ 10#ifdef GFX_ENABLE_CUDA 11using namespace Slang ; 12 13namespace cuda 14{ 15 16class DeviceImpl :public RendererBase 17{ 18private : 19static const CUDAReportStyle reportType = CUDAReportStyle ::Normal ; 20static int _calcSMCountPerMultiProcessor (int major ,int minor ); 21 22static SlangResult _findMaxFlopsDeviceIndex (int * outDeviceIndex ); 23 24static SlangResult _initCuda (CUDAReportStyle reportType = CUDAReportStyle ::Normal ); 25 26private : 27int m_deviceIndex = -1 ; 28CUdevice m_device = 0 ; 29RefPtr < CUDAContext > m_context ; 30DeviceInfo m_info ; 31String m_adapterName ; 32 33public : 34virtual SLANG_NO_THROW Result SLANG_MCALL 35getNativeDeviceHandles (InteropHandles * outHandles )override ; 36 37virtual SLANG_NO_THROW SlangResult SLANG_MCALL initialize (const Desc & desc )override ; 38 39Result getCUDAFormat (Format format ,CUarray_format * outFormat ); 40 41virtual SLANG_NO_THROW Result SLANG_MCALL createTextureResource ( 42const ITextureResource ::Desc & desc , 43const ITextureResource ::SubresourceData * initData , 44ITextureResource ** outResource )override ; 45 46virtual SLANG_NO_THROW Result SLANG_MCALL createBufferResource ( 47const IBufferResource ::Desc & descIn , 48const void * initData , 49IBufferResource ** outResource )override ; 50 51virtual SLANG_NO_THROW Result SLANG_MCALL createBufferFromSharedHandle ( 52InteropHandle handle , 53const IBufferResource ::Desc & desc , 54IBufferResource ** outResource )override ; 55 56virtual SLANG_NO_THROW Result SLANG_MCALL createTextureFromSharedHandle ( 57InteropHandle handle , 58const ITextureResource ::Desc & desc , 59const size_t size , 60ITextureResource ** outResource )override ; 61 62virtual SLANG_NO_THROW Result SLANG_MCALL createTextureView ( 63ITextureResource * texture , 64IResourceView ::Desc const & desc , 65IResourceView ** outView )override ; 66 67virtual SLANG_NO_THROW Result SLANG_MCALL createBufferView ( 68IBufferResource * buffer , 69IBufferResource * counterBuffer , 70IResourceView ::Desc const & desc , 71IResourceView ** outView )override ; 72 73virtual SLANG_NO_THROW Result SLANG_MCALL 74createQueryPool (const IQueryPool ::Desc & desc ,IQueryPool ** outPool )override ; 75 76virtual Result createShaderObjectLayout ( 77slang ::ISession * session , 78slang ::TypeLayoutReflection * typeLayout , 79ShaderObjectLayoutBase ** outLayout )override ; 80 81virtual Result createShaderObject (ShaderObjectLayoutBase * layout ,IShaderObject ** outObject ) 82override ; 83 84virtual Result createMutableShaderObject ( 85ShaderObjectLayoutBase * layout , 86IShaderObject ** outObject )override ; 87 88Result createRootShaderObject (IShaderProgram * program ,ShaderObjectBase ** outObject ); 89 90virtual SLANG_NO_THROW Result SLANG_MCALL createProgram ( 91const IShaderProgram ::Desc & desc , 92IShaderProgram ** outProgram , 93ISlangBlob ** outDiagnosticBlob )override ; 94 95virtual SLANG_NO_THROW Result SLANG_MCALL createComputePipelineState ( 96const ComputePipelineStateDesc & desc , 97IPipelineState ** outState )override ; 98 99void * map (IBufferResource * buffer ); 100 101void unmap (IBufferResource * buffer ); 102 103virtual SLANG_NO_THROW const DeviceInfo & SLANG_MCALL getDeviceInfo ()const override ; 104 105public : 106using TransientResourceHeapImpl = SimpleTransientResourceHeap < DeviceImpl ,CommandBufferImpl > ; 107 108virtual SLANG_NO_THROW Result SLANG_MCALL createTransientResourceHeap ( 109const ITransientResourceHeap ::Desc & desc , 110ITransientResourceHeap ** outHeap )override ; 111 112virtual SLANG_NO_THROW Result SLANG_MCALL 113createCommandQueue (const ICommandQueue ::Desc & desc ,ICommandQueue ** outQueue )override ; 114 115virtual SLANG_NO_THROW Result SLANG_MCALL createSwapchain ( 116const ISwapchain ::Desc & desc , 117WindowHandle window , 118ISwapchain ** outSwapchain )override ; 119 120virtual SLANG_NO_THROW Result SLANG_MCALL createFramebufferLayout ( 121const IFramebufferLayout ::Desc & desc , 122IFramebufferLayout ** outLayout )override ; 123 124virtual SLANG_NO_THROW Result SLANG_MCALL 125createFramebuffer (const IFramebuffer ::Desc & desc ,IFramebuffer ** outFramebuffer )override ; 126 127virtual SLANG_NO_THROW Result SLANG_MCALL createRenderPassLayout ( 128const IRenderPassLayout ::Desc & desc , 129IRenderPassLayout ** outRenderPassLayout )override ; 130 131virtual SLANG_NO_THROW Result SLANG_MCALL 132createSamplerState (ISamplerState ::Desc const & desc ,ISamplerState ** outSampler )override ; 133 134virtual SLANG_NO_THROW Result SLANG_MCALL 135createInputLayout (IInputLayout ::Desc const & desc ,IInputLayout ** outLayout )override ; 136 137virtual SLANG_NO_THROW Result SLANG_MCALL createGraphicsPipelineState ( 138const GraphicsPipelineStateDesc & desc , 139IPipelineState ** outState )override ; 140 141virtual SLANG_NO_THROW SlangResult SLANG_MCALL readTextureResource ( 142ITextureResource * texture , 143ResourceState state , 144ISlangBlob ** outBlob , 145size_t * outRowPitch , 146size_t * outPixelSize )override ; 147 148virtual SLANG_NO_THROW Result SLANG_MCALL readBufferResource ( 149IBufferResource * buffer , 150size_t offset , 151size_t size , 152ISlangBlob ** outBlob )override ; 153}; 154 155}// namespace cuda 156#endif 157}// namespace gfx