yum-mirror/slang

Making it easier to work with shaders

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

Ellie Hermaszewskaformatf65d756bf

master
1.9 KiB90 linesraw
1// cpu-resource-views.h
2#pragma once
3#include "cpu-base.h"
4#include "cpu-buffer.h"
5#include "cpu-texture.h"
6
7namespace gfx
8{
9using namespace Slang;
10
11namespace cpu
12{
13
14class ResourceViewImpl : public ResourceViewBase
15{
16public:
17    enum class Kind
18    {
19        Buffer,
20        Texture,
21    };
22    Kind getViewKind() const { return m_kind; }
23    Desc const& getDesc() const { return m_desc; }
24
25protected:
26    ResourceViewImpl(Kind kind, Desc const& desc);
27
28private:
29    Kind m_kind;
30};
31
32class BufferResourceViewImpl : public ResourceViewImpl
33{
34public:
35    BufferResourceViewImpl(Desc const& desc, BufferResourceImpl* buffer)
36        : ResourceViewImpl(Kind::Buffer, desc), m_buffer(buffer)
37    {
38    }
39
40    BufferResourceImpl* getBuffer() const;
41
42private:
43    RefPtr<BufferResourceImpl> m_buffer;
44};
45
46class TextureResourceViewImpl : public ResourceViewImpl, public slang_prelude::IRWTexture
47{
48public:
49    TextureResourceViewImpl(Desc const& desc, TextureResourceImpl* texture)
50        : ResourceViewImpl(Kind::Texture, desc), m_texture(texture)
51    {
52    }
53
54    TextureResourceImpl* getTexture() const;
55
56    //
57    // ITexture interface
58    //
59
60    slang_prelude::TextureDimensions GetDimensions(int mipLevel = -1) SLANG_OVERRIDE;
61
62    void Load(const int32_t* texelCoords, void* outData, size_t dataSize) SLANG_OVERRIDE;
63
64    void Sample(
65        slang_prelude::SamplerState samplerState,
66        const float* coords,
67        void* outData,
68        size_t dataSize) SLANG_OVERRIDE;
69
70    void SampleLevel(
71        slang_prelude::SamplerState samplerState,
72        const float* coords,
73        float level,
74        void* outData,
75        size_t dataSize) SLANG_OVERRIDE;
76
77    //
78    // IRWTexture interface
79    //
80
81    void* refAt(const uint32_t* texelCoords) SLANG_OVERRIDE;
82
83private:
84    RefPtr<TextureResourceImpl> m_texture;
85
86    void* _getTexelPtr(int32_t const* texelCoords);
87};
88
89} // namespace cpu
90} // namespace gfx