yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
f65d756bf
master
1// cpu-shader-object.h 2#pragma once 3#include "cpu-base.h" 4#include "cpu-shader-object-layout.h" 5 6namespace gfx 7{ 8using namespace Slang ; 9 10namespace cpu 11{ 12 13class CPUShaderObjectData 14{ 15public : 16Slang ::List < char > m_ordinaryData ; 17// Any "ordinary" / uniform data for this object 18Slang ::RefPtr < BufferResourceImpl > m_bufferResource ; 19Slang ::RefPtr < BufferResourceViewImpl > m_bufferView ; 20 21Index getCount (); 22void setCount (Index count ); 23char * getBuffer (); 24 25 ~CPUShaderObjectData (); 26 27/// Returns a StructuredBuffer resource view for GPU access into the buffer content. 28/// Creates a StructuredBuffer resource if it has not been created. 29ResourceViewBase * getResourceView ( 30RendererBase * device , 31slang ::TypeLayoutReflection * elementLayout , 32slang ::BindingType bindingType ); 33}; 34 35class ShaderObjectImpl 36 :public ShaderObjectBaseImpl < ShaderObjectImpl ,ShaderObjectLayoutImpl ,CPUShaderObjectData > 37{ 38typedef ShaderObjectBaseImpl < ShaderObjectImpl ,ShaderObjectLayoutImpl ,CPUShaderObjectData > 39Super ; 40 41public : 42List < RefPtr < ResourceViewImpl >>m_resources ; 43 44virtual SLANG_NO_THROW Result SLANG_MCALL 45init (IDevice * device ,ShaderObjectLayoutImpl * typeLayout ); 46 47virtual SLANG_NO_THROW GfxCount SLANG_MCALL getEntryPointCount ()override ; 48virtual SLANG_NO_THROW Result SLANG_MCALL 49getEntryPoint ( GfxIndex index, IShaderObject ** outEntryPoint) override; 50 51virtual SLANG_NO_THROW const void * SLANG_MCALL getRawData () override; 52 53virtual SLANG_NO_THROW size_t SLANG_MCALL getSize () override; 54 55virtual SLANG_NO_THROW Result SLANG_MCALL 56setData ( ShaderOffset const & offset, void const * data, size_t size) override; 57virtual SLANG_NO_THROW Result SLANG_MCALL 58setResource ( ShaderOffset const & offset, IResourceView * inView) override; 59virtual SLANG_NO_THROW Result SLANG_MCALL 60setObject ( ShaderOffset const & offset, IShaderObject * object) override; 61virtual SLANG_NO_THROW Result SLANG_MCALL 62setSampler ( ShaderOffset const & offset, ISamplerState * sampler) override; 63virtual SLANG_NO_THROW Result SLANG_MCALL setCombinedTextureSampler ( 64ShaderOffset const & offset, 65IResourceView * textureView, 66ISamplerState * sampler) override; 67 68char * getDataBuffer (); 69}; 70 71class MutableShaderObjectImpl 72: public MutableShaderObject < MutableShaderObjectImpl, ShaderObjectLayoutImpl > 73{ 74}; 75 76class EntryPointShaderObjectImpl : public ShaderObjectImpl 77{ 78public : 79EntryPointLayoutImpl * getLayout (); 80}; 81 82class RootShaderObjectImpl : public ShaderObjectImpl 83{ 84public : 85virtual SLANG_NO_THROW uint32_t SLANG_MCALL addRef () override ; 86virtual SLANG_NO_THROW uint32_t SLANG_MCALL release () override; 87 88// An overload for the `init` virtual function, with a more specific type 89Result init ( IDevice * device, RootShaderObjectLayoutImpl * programLayout); 90using ShaderObjectImpl::init; 91 92RootShaderObjectLayoutImpl * getLayout (); 93 94EntryPointShaderObjectImpl * getEntryPoint ( Index index); 95List < RefPtr < EntryPointShaderObjectImpl>> m_entryPoints; 96 97virtual SLANG_NO_THROW GfxCount SLANG_MCALL getEntryPointCount () override; 98virtual SLANG_NO_THROW Result SLANG_MCALL 99getEntryPoint ( GfxIndex index, IShaderObject ** outEntryPoint) override; 100virtual Result collectSpecializationArgs ( ExtendedShaderObjectTypeList & args) override; 101}; 102 103} // namespace cpu 104} // namespace gfx