25#ifndef PXR_IMAGING_HGI_SHADERFUNCTIONDESC_H
26#define PXR_IMAGING_HGI_SHADERFUNCTIONDESC_H
29#include "pxr/imaging/hgi/api.h"
30#include "pxr/imaging/hgi/enums.h"
31#include "pxr/imaging/hgi/types.h"
36PXR_NAMESPACE_OPEN_SCOPE
70 std::string nameInShader;
73 HgiShaderTextureType textureType;
79using HgiShaderFunctionTextureDescVector =
80 std::vector<HgiShaderFunctionTextureDesc>;
116 std::string nameInShader;
120 HgiBindingType binding;
124using HgiShaderFunctionBufferDescVector =
125 std::vector<HgiShaderFunctionBufferDesc>;
168 std::string nameInShader;
171 int32_t interstageSlot;
172 HgiInterpolationType interpolation;
173 HgiSamplingType sampling;
174 HgiStorageType storage;
176 std::string arraySize;
179using HgiShaderFunctionParamDescVector =
180 std::vector<HgiShaderFunctionParamDesc>;
218 HgiInterpolationType interpolation;
219 HgiSamplingType sampling;
221 using MemberVector = std::vector<Member>;
223 std::string blockName;
224 std::string instanceName;
225 MemberVector members;
226 std::string arraySize;
227 int32_t interstageSlot;
230using HgiShaderFunctionParamBlockDescVector =
231 std::vector<HgiShaderFunctionParamBlockDesc>;
245 const HgiShaderFunctionParamBlockDesc::Member& lhs,
246 const HgiShaderFunctionParamBlockDesc::Member& rhs);
250 const HgiShaderFunctionParamBlockDesc::Member& lhs,
251 const HgiShaderFunctionParamBlockDesc::Member& rhs);
306 enum class PatchType { Triangles, Quads, Isolines };
307 enum class Spacing { Equal, FractionalEven, FractionalOdd };
308 enum class Ordering { CW, CCW };
315 std::string numVertsPerPatchIn;
316 std::string numVertsPerPatchOut;
345 enum class InPrimitiveType {
346 Points, Lines, LinesAdjacency, Triangles, TrianglesAdjacency };
347 enum class OutPrimitiveType {
348 Points, LineStrip, TriangleStrip };
353 InPrimitiveType inPrimitiveType;
354 OutPrimitiveType outPrimitiveType;
355 std::string outMaxVertices;
382 bool earlyFragmentTests;
443 std::string debugName;
444 HgiShaderStage shaderStage;
445 const char *shaderCodeDeclarations;
446 const char *shaderCode;
447 std::string *generatedShaderCodeOut;
448 std::vector<HgiShaderFunctionTextureDesc> textures;
449 std::vector<HgiShaderFunctionBufferDesc> buffers;
450 std::vector<HgiShaderFunctionParamDesc> constantParams;
451 std::vector<HgiShaderFunctionParamDesc> stageGlobalMembers;
452 std::vector<HgiShaderFunctionParamDesc> stageInputs;
453 std::vector<HgiShaderFunctionParamDesc> stageOutputs;
454 std::vector<HgiShaderFunctionParamBlockDesc> stageInputBlocks;
455 std::vector<HgiShaderFunctionParamBlockDesc> stageOutputBlocks;
462using HgiShaderFunctionDescVector =
463 std::vector<HgiShaderFunctionDesc>;
478HgiShaderFunctionAddTexture(
480 const std::string &nameInShader,
481 const uint32_t bindIndex = 0,
482 uint32_t dimensions = 2,
483 const HgiFormat &format = HgiFormatFloat32Vec4,
484 const HgiShaderTextureType textureType = HgiShaderTextureTypeTexture);
489HgiShaderFunctionAddArrayOfTextures(
491 const std::string &nameInShader,
492 const uint32_t arraySize,
493 const uint32_t bindIndex = 0,
494 const uint32_t dimensions = 2,
495 const HgiFormat &format = HgiFormatFloat32Vec4,
496 const HgiShaderTextureType textureType = HgiShaderTextureTypeTexture);
501HgiShaderFunctionAddWritableTexture(
503 const std::string &nameInShader,
504 const uint32_t bindIndex = 0,
505 const uint32_t dimensions = 2,
506 const HgiFormat &format = HgiFormatFloat32Vec4,
507 const HgiShaderTextureType textureType = HgiShaderTextureTypeTexture);
512HgiShaderFunctionAddBuffer(
514 const std::string &nameInShader,
515 const std::string &type,
516 const uint32_t bindIndex,
517 HgiBindingType binding,
518 const uint32_t arraySize = 0);
523HgiShaderFunctionAddWritableBuffer(
525 const std::string &nameInShader,
526 const std::string &type,
527 const uint32_t bindIndex);
533HgiShaderFunctionAddConstantParam(
535 const std::string &nameInShader,
536 const std::string &type,
537 const std::string &role = std::string());
544HgiShaderFunctionAddStageInput(
546 const std::string &nameInShader,
547 const std::string &type,
548 const std::string &role = std::string());
554HgiShaderFunctionAddStageInput(
561HgiShaderFunctionAddGlobalVariable(
563 const std::string &nameInShader,
564 const std::string &type,
565 const std::string &arraySize);
571HgiShaderFunctionAddStageOutput(
573 const std::string &nameInShader,
574 const std::string &type,
575 const std::string &role = std::string(),
576 const std::string &arraySize = std::string());
582HgiShaderFunctionAddStageOutput(
584 const std::string &nameInShader,
585 const std::string &type,
586 const uint32_t location);
592HgiShaderFunctionAddStageOutput(
596PXR_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.