MCPcopy Create free account
hub / github.com/davideberly/GeometricTools / CreateFromBytecode

Method CreateFromBytecode

GTE/Graphics/DX11/HLSLProgramFactory.cpp:30–87  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

28}
29
30std::shared_ptr<VisualProgram> HLSLProgramFactory::CreateFromBytecode(
31 std::vector<uint8_t> const& vsBytecode,
32 std::vector<uint8_t> const& psBytecode,
33 std::vector<uint8_t> const& gsBytecode)
34{
35 LogAssert(vsBytecode.size() > 0 && psBytecode.size() > 0,
36 "A program must have a vertex shader and a pixel shader.");
37
38 std::shared_ptr<HLSLShader> vshader;
39 std::shared_ptr<HLSLShader> pshader;
40 std::shared_ptr<HLSLShader> gshader;
41
42 HLSLReflection hlslVShader = HLSLShaderFactory::CreateFromBytecode("vs",
43 vsEntry, std::string("vs_") + version, vsBytecode.size(),
44 vsBytecode.data());
45 if (hlslVShader.IsValid())
46 {
47 vshader = std::make_shared<HLSLShader>(hlslVShader, GT_VERTEX_SHADER);
48 }
49 else
50 {
51 return nullptr;
52 }
53
54 HLSLReflection hlslPShader = HLSLShaderFactory::CreateFromBytecode("ps",
55 psEntry, std::string("ps_") + version, psBytecode.size(),
56 psBytecode.data());
57 if (hlslPShader.IsValid())
58 {
59 pshader = std::make_shared<HLSLShader>(hlslPShader, GT_PIXEL_SHADER);
60 }
61 else
62 {
63 return nullptr;
64 }
65
66 HLSLReflection hlslGShader;
67 if (gsBytecode.size() > 0)
68 {
69 hlslGShader = HLSLShaderFactory::CreateFromBytecode("gs",
70 gsEntry, std::string("gs_") + version, gsBytecode.size(),
71 gsBytecode.data());
72 if (hlslGShader.IsValid())
73 {
74 gshader = std::make_shared<HLSLShader>(hlslGShader, GT_GEOMETRY_SHADER);
75 }
76 else
77 {
78 return nullptr;
79 }
80 }
81
82 auto program = std::make_shared<HLSLVisualProgram>();
83 program->SetVertexShader(vshader);
84 program->SetPixelShader(pshader);
85 program->SetGeometryShader(gshader);
86 return program;
87}

Callers

nothing calls this directly

Calls 5

SetVertexShaderMethod · 0.80
SetPixelShaderMethod · 0.80
SetGeometryShaderMethod · 0.80
SetComputeShaderMethod · 0.80
IsValidMethod · 0.45

Tested by

no test coverage detected