8#ifndef PXR_IMAGING_HGI_SHADERFUNCTIONDESC_H
9#define PXR_IMAGING_HGI_SHADERFUNCTIONDESC_H
12#include "pxr/imaging/hgi/api.h"
13#include "pxr/imaging/hgi/enums.h"
14#include "pxr/imaging/hgi/types.h"
19PXR_NAMESPACE_OPEN_SCOPE
53 std::string nameInShader;
56 HgiShaderTextureType textureType;
62using HgiShaderFunctionTextureDescVector =
63 std::vector<HgiShaderFunctionTextureDesc>;
99 std::string nameInShader;
103 HgiBindingType binding;
107using HgiShaderFunctionBufferDescVector =
108 std::vector<HgiShaderFunctionBufferDesc>;
151 std::string nameInShader;
154 int32_t interstageSlot;
155 HgiInterpolationType interpolation;
156 HgiSamplingType sampling;
157 HgiStorageType storage;
159 std::string arraySize;
162using HgiShaderFunctionParamDescVector =
163 std::vector<HgiShaderFunctionParamDesc>;
201 HgiInterpolationType interpolation;
202 HgiSamplingType sampling;
204 using MemberVector = std::vector<Member>;
206 std::string blockName;
207 std::string instanceName;
208 MemberVector members;
209 std::string arraySize;
210 int32_t interstageSlot;
213using HgiShaderFunctionParamBlockDescVector =
214 std::vector<HgiShaderFunctionParamBlockDesc>;
228 const HgiShaderFunctionParamBlockDesc::Member& lhs,
229 const HgiShaderFunctionParamBlockDesc::Member& rhs);
233 const HgiShaderFunctionParamBlockDesc::Member& lhs,
234 const HgiShaderFunctionParamBlockDesc::Member& rhs);
289 enum class PatchType { Triangles, Quads, Isolines };
290 enum class Spacing { Equal, FractionalEven, FractionalOdd };
291 enum class Ordering { CW, CCW };
298 std::string numVertsPerPatchIn;
299 std::string numVertsPerPatchOut;
328 enum class InPrimitiveType {
329 Points, Lines, LinesAdjacency, Triangles, TrianglesAdjacency };
330 enum class OutPrimitiveType {
331 Points, LineStrip, TriangleStrip };
336 InPrimitiveType inPrimitiveType;
337 OutPrimitiveType outPrimitiveType;
338 std::string outMaxVertices;
365 bool earlyFragmentTests;
426 std::string debugName;
427 HgiShaderStage shaderStage;
428 const char *shaderCodeDeclarations;
429 const char *shaderCode;
430 std::string *generatedShaderCodeOut;
431 std::vector<HgiShaderFunctionTextureDesc> textures;
432 std::vector<HgiShaderFunctionBufferDesc> buffers;
433 std::vector<HgiShaderFunctionParamDesc> constantParams;
434 std::vector<HgiShaderFunctionParamDesc> stageGlobalMembers;
435 std::vector<HgiShaderFunctionParamDesc> stageInputs;
436 std::vector<HgiShaderFunctionParamDesc> stageOutputs;
437 std::vector<HgiShaderFunctionParamBlockDesc> stageInputBlocks;
438 std::vector<HgiShaderFunctionParamBlockDesc> stageOutputBlocks;
445using HgiShaderFunctionDescVector =
446 std::vector<HgiShaderFunctionDesc>;
461HgiShaderFunctionAddTexture(
463 const std::string &nameInShader,
464 const uint32_t bindIndex = 0,
465 uint32_t dimensions = 2,
466 const HgiFormat &format = HgiFormatFloat32Vec4,
467 const HgiShaderTextureType textureType = HgiShaderTextureTypeTexture);
472HgiShaderFunctionAddArrayOfTextures(
474 const std::string &nameInShader,
475 const uint32_t arraySize,
476 const uint32_t bindIndex = 0,
477 const uint32_t dimensions = 2,
478 const HgiFormat &format = HgiFormatFloat32Vec4,
479 const HgiShaderTextureType textureType = HgiShaderTextureTypeTexture);
484HgiShaderFunctionAddWritableTexture(
486 const std::string &nameInShader,
487 const uint32_t bindIndex = 0,
488 const uint32_t dimensions = 2,
489 const HgiFormat &format = HgiFormatFloat32Vec4,
490 const HgiShaderTextureType textureType = HgiShaderTextureTypeTexture);
495HgiShaderFunctionAddBuffer(
497 const std::string &nameInShader,
498 const std::string &type,
499 const uint32_t bindIndex,
500 HgiBindingType binding,
501 const uint32_t arraySize = 0);
506HgiShaderFunctionAddWritableBuffer(
508 const std::string &nameInShader,
509 const std::string &type,
510 const uint32_t bindIndex);
516HgiShaderFunctionAddConstantParam(
518 const std::string &nameInShader,
519 const std::string &type,
520 const std::string &role = std::string());
527HgiShaderFunctionAddStageInput(
529 const std::string &nameInShader,
530 const std::string &type,
531 const std::string &role = std::string());
537HgiShaderFunctionAddStageInput(
544HgiShaderFunctionAddGlobalVariable(
546 const std::string &nameInShader,
547 const std::string &type,
548 const std::string &arraySize);
554HgiShaderFunctionAddStageOutput(
556 const std::string &nameInShader,
557 const std::string &type,
558 const std::string &role = std::string(),
559 const std::string &arraySize = std::string());
565HgiShaderFunctionAddStageOutput(
567 const std::string &nameInShader,
568 const std::string &type,
569 const uint32_t location);
575HgiShaderFunctionAddStageOutput(
579PXR_NAMESPACE_CLOSE_SCOPE
Basic type for a vector of 3 int components.
Describes a buffer to be passed into a shader.
Describes a compute function's description.
Describes the properties needed to create a GPU shader function.
Describes a fragment function's description.
Describes a geometry function's description.
Describes an interstage param block between shader stages.
Describes a param passed into a shader or between shader stages.
Describes a tessellation function's description.
Describes a texture to be passed into a shader.