| 86 | )"; |
| 87 | |
| 88 | IPipelineState* VectorFieldRenderer::GetPSO(const PSOKey& Key) |
| 89 | { |
| 90 | auto it = m_PSOs.find(Key); |
| 91 | if (it != m_PSOs.end()) |
| 92 | return it->second; |
| 93 | |
| 94 | RenderDeviceWithCache_N Device{m_pDevice, m_pStateCache}; |
| 95 | |
| 96 | RefCntAutoPtr<IShaderSourceInputStreamFactory> pMemorySourceFactory = |
| 97 | CreateMemoryShaderSourceFactory({MemoryShaderSourceFileInfo{"PSMainGenerated.generated", !m_PSMainSource.empty() ? m_PSMainSource.c_str() : DefaultPSMain}}); |
| 98 | RefCntAutoPtr<IShaderSourceInputStreamFactory> pShaderSourceFactory = |
| 99 | CreateCompoundShaderSourceFactory({&DiligentFXShaderSourceStreamFactory::GetInstance(), pMemorySourceFactory}); |
| 100 | |
| 101 | ShaderCreateInfo ShaderCI; |
| 102 | ShaderCI.SourceLanguage = SHADER_SOURCE_LANGUAGE_HLSL; |
| 103 | ShaderCI.pShaderSourceStreamFactory = pShaderSourceFactory; |
| 104 | if (m_PackMatrixRowMajor) |
| 105 | ShaderCI.CompileFlags |= SHADER_COMPILE_FLAG_PACK_MATRIX_ROW_MAJOR; |
| 106 | if (m_AsyncShaders) |
| 107 | ShaderCI.CompileFlags |= SHADER_COMPILE_FLAG_ASYNCHRONOUS; |
| 108 | |
| 109 | ShaderMacroHelper Macros; |
| 110 | Macros.Add("CONVERT_OUTPUT_TO_SRGB", Key.ConvertOutputToSRGB); |
| 111 | ShaderCI.Macros = Macros; |
| 112 | |
| 113 | RefCntAutoPtr<IShader> pVS; |
| 114 | { |
| 115 | ShaderCI.Desc = {"Vector Field VS", SHADER_TYPE_VERTEX, true}; |
| 116 | ShaderCI.EntryPoint = "main"; |
| 117 | ShaderCI.FilePath = "VectorField.vsh"; |
| 118 | |
| 119 | pVS = Device.CreateShader(ShaderCI); |
| 120 | if (!pVS) |
| 121 | { |
| 122 | UNEXPECTED("Failed to create vector field vertex shader"); |
| 123 | return nullptr; |
| 124 | } |
| 125 | } |
| 126 | |
| 127 | // Create pixel shader |
| 128 | RefCntAutoPtr<IShader> pPS; |
| 129 | { |
| 130 | ShaderCI.Desc = {"Vector Field PS", SHADER_TYPE_PIXEL, true}; |
| 131 | ShaderCI.EntryPoint = "main"; |
| 132 | ShaderCI.FilePath = "PSMainGenerated.generated"; |
| 133 | |
| 134 | pPS = Device.CreateShader(ShaderCI); |
| 135 | if (!pPS) |
| 136 | { |
| 137 | UNEXPECTED("Failed to create vector field pixel shader"); |
| 138 | return nullptr; |
| 139 | } |
| 140 | } |
| 141 | |
| 142 | PipelineResourceLayoutDescX ResourceLauout; |
| 143 | ResourceLauout |
| 144 | .SetDefaultVariableType(SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE) |
| 145 | .AddVariable(SHADER_TYPE_VERTEX, "g_tex2DVectorField", SHADER_RESOURCE_VARIABLE_TYPE_DYNAMIC) |
nothing calls this directly
no test coverage detected