Loading...
Searching...
No Matches
shaderCode.h
1//
2// Copyright 2016 Pixar
3//
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
5// with the following modification; you may not use this file except in
6// compliance with the Apache License and the following modification to it:
7// Section 6. Trademarks. is deleted and replaced with:
8//
9// 6. Trademarks. This License does not grant permission to use the trade
10// names, trademarks, service marks, or product names of the Licensor
11// and its affiliates, except as required to comply with Section 4(c) of
12// the License and to reproduce the content of the NOTICE file.
13//
14// You may obtain a copy of the Apache License at
15//
16// http://www.apache.org/licenses/LICENSE-2.0
17//
18// Unless required by applicable law or agreed to in writing, software
19// distributed under the Apache License with the above modification is
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
21// KIND, either express or implied. See the Apache License for the specific
22// language governing permissions and limitations under the Apache License.
23//
24#ifndef PXR_IMAGING_HD_ST_SHADER_CODE_H
25#define PXR_IMAGING_HD_ST_SHADER_CODE_H
26
27#include "pxr/pxr.h"
28#include "pxr/imaging/hdSt/api.h"
29#include "pxr/imaging/hdSt/resourceRegistry.h"
30#include "pxr/imaging/hd/version.h"
31#include "pxr/imaging/hd/enums.h"
32
33#include "pxr/usd/sdf/path.h"
34
35#include "pxr/base/tf/token.h"
36
37#include <memory>
38#include <string>
39#include <vector>
40
41PXR_NAMESPACE_OPEN_SCOPE
42
43
44using HdStBindingRequestVector = std::vector<class HdStBindingRequest>;
45
46using HdStShaderCodeSharedPtr =
47 std::shared_ptr<class HdStShaderCode>;
48using HdStShaderCodeSharedPtrVector =
49 std::vector<HdStShaderCodeSharedPtr>;
50
51using HdSt_MaterialParamVector =
52 std::vector<class HdSt_MaterialParam>;
53using HdBufferSourceSharedPtr =
54 std::shared_ptr<class HdBufferSource>;
55using HdBufferSourceSharedPtrVector =
56 std::vector<HdBufferSourceSharedPtr>;
57using HdBufferArrayRangeSharedPtr =
58 std::shared_ptr<class HdBufferArrayRange>;
59using HdStTextureHandleSharedPtr =
60 std::shared_ptr<class HdStTextureHandle>;
61using HdStComputationSharedPtr =
62 std::shared_ptr<class HdStComputation>;
63
64class HioGlslfx;
65class HdSt_ResourceBinder;
67
75class HdStShaderCode : public std::enable_shared_from_this<HdStShaderCode>
76{
77public:
78 typedef size_t ID;
79
80 HDST_API
82 HDST_API
83 virtual ~HdStShaderCode();
84
92 virtual ID ComputeHash() const = 0;
93
95 HDST_API
96 static ID ComputeHash(HdStShaderCodeSharedPtrVector const &shaders);
97
108 HDST_API
109 virtual ID ComputeTextureSourceHash() const;
110
113 virtual std::string GetSource(TfToken const &shaderStageKey) const = 0;
114
118 HDST_API
119 VtDictionary GetLayout(TfTokenVector const &shaderStageKeys) const;
120
121 // XXX: Should be pure-virtual
123 HDST_API
124 virtual HdSt_MaterialParamVector const& GetParams() const;
125
127 HDST_API
128 virtual bool IsEnabledPrimvarFiltering() const;
129
131 HDST_API
132 virtual TfTokenVector const& GetPrimvarNames() const;
133
135
139
153 HdTextureType type;
155 HdStTextureHandleSharedPtr handle;
156
159 size_t hash;
160 };
161 using NamedTextureHandleVector = std::vector<NamedTextureHandle>;
162
165 HDST_API
166 virtual NamedTextureHandleVector const & GetNamedTextureHandles() const;
167
169
170 // XXX: Should be pure-virtual
173 HDST_API
174 virtual HdBufferArrayRangeSharedPtr const& GetShaderData() const;
175
179 virtual void BindResources(int program,
180 HdSt_ResourceBinder const &binder) = 0;
181
183 virtual void UnbindResources(int program,
184 HdSt_ResourceBinder const &binder) = 0;
185
187 virtual void AddBindings(HdStBindingRequestVector* customBindings) = 0;
188
194 HDST_API
195 virtual TfToken GetMaterialTag() const;
196
202 public:
203 HDST_API
204 void AddSource(HdBufferArrayRangeSharedPtr const &range,
205 HdBufferSourceSharedPtr const &source);
206
207 HDST_API
208 void AddSources(HdBufferArrayRangeSharedPtr const &range,
209 HdBufferSourceSharedPtrVector &&sources);
210
211 HDST_API
212 void AddComputation(HdBufferArrayRangeSharedPtr const &range,
213 HdStComputationSharedPtr const &computation,
214 HdStComputeQueue const queue);
215
216 HdStResourceRegistry * GetResourceRegistry() const {
217 return _registry;
218 }
219
220 private:
221 friend class HdStResourceRegistry;
223 HdStResourceRegistry *_registry;
224 };
225
233 HDST_API
235
236private:
237
238 // No copying
239 HdStShaderCode(const HdStShaderCode &) = delete;
240 HdStShaderCode &operator =(const HdStShaderCode &) = delete;
241
242 // Returns the HioGlslfx instance used to configure this shader.
243 // This can return nullptr for shaders without a GLSLFX instance.
244 virtual HioGlslfx const * _GetGlslfx() const;
245};
246
247
248PXR_NAMESPACE_CLOSE_SCOPE
249
250#endif //HDST_SHADER_H
A central registry of all GPU resources.
The context available in implementations of AddResourcesFromTextures.
Definition: shaderCode.h:201
A base class representing the implementation (code) of a shader, used in conjunction with HdRenderPas...
Definition: shaderCode.h:76
static HDST_API ID ComputeHash(HdStShaderCodeSharedPtrVector const &shaders)
Returns the combined hash values of multiple shaders.
virtual void BindResources(int program, HdSt_ResourceBinder const &binder)=0
Binds shader-specific resources to program XXX: this interface is meant to be used for bridging the G...
HdTextureType type
Equal to handle->GetTextureObject()->GetTextureType().
Definition: shaderCode.h:153
size_t hash
A hash unique to the corresponding asset; used to split draw batches when not using bindless textures...
Definition: shaderCode.h:159
virtual HDST_API TfTokenVector const & GetPrimvarNames() const
Returns the names of primvar that are used by this shader.
HdStTextureHandleSharedPtr handle
The texture.
Definition: shaderCode.h:155
virtual HDST_API HdSt_MaterialParamVector const & GetParams() const
Returns the shader parameters for this shader.
virtual HDST_API NamedTextureHandleVector const & GetNamedTextureHandles() const
Textures that need to be bound for this shader.
virtual void AddBindings(HdStBindingRequestVector *customBindings)=0
Add custom bindings (used by codegen)
virtual HDST_API void AddResourcesFromTextures(ResourceContext &ctx) const
This function is called after textures have been allocated and loaded to add buffer sources and compu...
virtual std::string GetSource(TfToken const &shaderStageKey) const =0
Returns the shader source provided by this shader for shaderStageKey.
HDST_API VtDictionary GetLayout(TfTokenVector const &shaderStageKeys) const
Returns the resource layout for the shader stages specified by shaderStageKeys.
virtual HDST_API ID ComputeTextureSourceHash() const
Returns the hash value of the paths of the texture prims consumed by this shader.
virtual HDST_API TfToken GetMaterialTag() const
Material tags can be set in the meta-data of a glslfx file to control what rprim collection that prim...
virtual void UnbindResources(int program, HdSt_ResourceBinder const &binder)=0
Unbinds shader-specific resources.
virtual HDST_API bool IsEnabledPrimvarFiltering() const
Returns whether primvar filtering is enabled for this shader.
virtual HDST_API HdBufferArrayRangeSharedPtr const & GetShaderData() const
Returns a buffer which stores parameter fallback values and texture handles.
virtual ID ComputeHash() const =0
Returns the hash value of the shader code and configuration.
TfToken name
Name by which the texture will be accessed, i.e., the name of the accesor for thexture will be HdGet_...
Definition: shaderCode.h:147
Information necessary to bind textures and create accessor for the texture.
Definition: shaderCode.h:143
A class representing the config and shader source of a glslfx file.
Definition: glslfx.h:151
Token for efficient comparison, assignment, and hashing of known strings.
Definition: token.h:88
A map with string keys and VtValue values.
Definition: dictionary.h:60
TfToken class for efficient string referencing and hashing, plus conversions to and from stl string c...
std::vector< TfToken > TfTokenVector
Convenience types.
Definition: token.h:457