diff options
| author | Lioncash <mathew1800@gmail.com> | 2019-07-26 19:34:27 -0400 |
|---|---|---|
| committer | Lioncash <mathew1800@gmail.com> | 2019-07-26 20:06:14 -0400 |
| commit | aca02f9734806572183d87b9432e8855adfa132d (patch) | |
| tree | 287a6966e127c00df0f51a2efc177bd7c4d8438f /Source/Core/VideoBackends | |
| parent | 0ce6264f90e5591a7f28b2545f727809beaa8415 (diff) | |
D3DCommon/Shader: Use std::optional with CompileShader()
Allows removing the use of an out parameter, making it nicer to use.
Diffstat (limited to 'Source/Core/VideoBackends')
| -rw-r--r-- | Source/Core/VideoBackends/D3D/Render.cpp | 6 | ||||
| -rw-r--r-- | Source/Core/VideoBackends/D3D12/DXShader.cpp | 6 | ||||
| -rw-r--r-- | Source/Core/VideoBackends/D3DCommon/Shader.cpp | 10 | ||||
| -rw-r--r-- | Source/Core/VideoBackends/D3DCommon/Shader.h | 5 |
4 files changed, 13 insertions, 14 deletions
diff --git a/Source/Core/VideoBackends/D3D/Render.cpp b/Source/Core/VideoBackends/D3D/Render.cpp index c37871b5fb..e058bd1c66 100644 --- a/Source/Core/VideoBackends/D3D/Render.cpp +++ b/Source/Core/VideoBackends/D3D/Render.cpp @@ -115,11 +115,11 @@ std::unique_ptr<AbstractFramebuffer> Renderer::CreateFramebuffer(AbstractTexture std::unique_ptr<AbstractShader> Renderer::CreateShaderFromSource(ShaderStage stage, std::string_view source) { - DXShader::BinaryData bytecode; - if (!DXShader::CompileShader(D3D::feature_level, &bytecode, stage, source)) + auto bytecode = DXShader::CompileShader(D3D::feature_level, stage, source); + if (!bytecode) return nullptr; - return DXShader::CreateFromBytecode(stage, std::move(bytecode)); + return DXShader::CreateFromBytecode(stage, std::move(*bytecode)); } std::unique_ptr<AbstractShader> Renderer::CreateShaderFromBinary(ShaderStage stage, diff --git a/Source/Core/VideoBackends/D3D12/DXShader.cpp b/Source/Core/VideoBackends/D3D12/DXShader.cpp index bd06559152..856d0e8682 100644 --- a/Source/Core/VideoBackends/D3D12/DXShader.cpp +++ b/Source/Core/VideoBackends/D3D12/DXShader.cpp @@ -26,11 +26,11 @@ std::unique_ptr<DXShader> DXShader::CreateFromBytecode(ShaderStage stage, Binary std::unique_ptr<DXShader> DXShader::CreateFromSource(ShaderStage stage, std::string_view source) { - BinaryData bytecode; - if (!CompileShader(g_dx_context->GetFeatureLevel(), &bytecode, stage, source)) + auto bytecode = CompileShader(g_dx_context->GetFeatureLevel(), stage, source); + if (!bytecode) return nullptr; - return CreateFromBytecode(stage, std::move(bytecode)); + return CreateFromBytecode(stage, std::move(*bytecode)); } D3D12_SHADER_BYTECODE DXShader::GetD3DByteCode() const diff --git a/Source/Core/VideoBackends/D3DCommon/Shader.cpp b/Source/Core/VideoBackends/D3DCommon/Shader.cpp index 81d88c0968..3194fd8aa4 100644 --- a/Source/Core/VideoBackends/D3DCommon/Shader.cpp +++ b/Source/Core/VideoBackends/D3DCommon/Shader.cpp @@ -89,8 +89,8 @@ static const char* GetCompileTarget(D3D_FEATURE_LEVEL feature_level, ShaderStage } } -bool Shader::CompileShader(D3D_FEATURE_LEVEL feature_level, BinaryData* out_bytecode, - ShaderStage stage, std::string_view source) +std::optional<Shader::BinaryData> Shader::CompileShader(D3D_FEATURE_LEVEL feature_level, + ShaderStage stage, std::string_view source) { static constexpr D3D_SHADER_MACRO macros[] = {{"API_D3D", "1"}, {nullptr, nullptr}}; const UINT flags = g_ActiveConfig.bEnableValidationLayer ? @@ -116,7 +116,7 @@ bool Shader::CompileShader(D3D_FEATURE_LEVEL feature_level, BinaryData* out_byte PanicAlert("Failed to compile %s:\nDebug info (%s):\n%s", filename.c_str(), target, static_cast<const char*>(errors->GetBufferPointer())); - return false; + return std::nullopt; } if (errors && errors->GetBufferSize() > 0) @@ -125,9 +125,7 @@ bool Shader::CompileShader(D3D_FEATURE_LEVEL feature_level, BinaryData* out_byte static_cast<const char*>(errors->GetBufferPointer())); } - out_bytecode->resize(code->GetBufferSize()); - std::memcpy(out_bytecode->data(), code->GetBufferPointer(), code->GetBufferSize()); - return true; + return CreateByteCode(code->GetBufferPointer(), code->GetBufferSize()); } AbstractShader::BinaryData Shader::CreateByteCode(const void* data, size_t length) diff --git a/Source/Core/VideoBackends/D3DCommon/Shader.h b/Source/Core/VideoBackends/D3DCommon/Shader.h index 2f179c9b0d..08158d6e1e 100644 --- a/Source/Core/VideoBackends/D3DCommon/Shader.h +++ b/Source/Core/VideoBackends/D3DCommon/Shader.h @@ -4,6 +4,7 @@ #pragma once +#include <optional> #include <string_view> #include "VideoBackends/D3DCommon/Common.h" #include "VideoCommon/AbstractShader.h" @@ -19,8 +20,8 @@ public: BinaryData GetBinary() const override; - static bool CompileShader(D3D_FEATURE_LEVEL feature_level, BinaryData* out_bytecode, - ShaderStage stage, std::string_view source); + static std::optional<BinaryData> CompileShader(D3D_FEATURE_LEVEL feature_level, ShaderStage stage, + std::string_view source); static BinaryData CreateByteCode(const void* data, size_t length); |
