summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends
diff options
context:
space:
mode:
authorLioncash <mathew1800@gmail.com>2019-07-26 19:34:27 -0400
committerLioncash <mathew1800@gmail.com>2019-07-26 20:06:14 -0400
commitaca02f9734806572183d87b9432e8855adfa132d (patch)
tree287a6966e127c00df0f51a2efc177bd7c4d8438f /Source/Core/VideoBackends
parent0ce6264f90e5591a7f28b2545f727809beaa8415 (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.cpp6
-rw-r--r--Source/Core/VideoBackends/D3D12/DXShader.cpp6
-rw-r--r--Source/Core/VideoBackends/D3DCommon/Shader.cpp10
-rw-r--r--Source/Core/VideoBackends/D3DCommon/Shader.h5
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);