Skip to content

Commit

Permalink
Merge pull request #8266 from lioncash/shadowing
Browse files Browse the repository at this point in the history
D3DCommon/Shader: Use std::optional where applicable
  • Loading branch information
stenzek committed Jul 28, 2019
2 parents 5bad233 + aca02f9 commit b0113b6
Show file tree
Hide file tree
Showing 5 changed files with 17 additions and 19 deletions.
2 changes: 0 additions & 2 deletions Source/Core/VideoBackends/D3D/DXShader.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@ class DXShader final : public D3DCommon::Shader
DXShader(ShaderStage stage, BinaryData bytecode, ID3D11DeviceChild* shader);
~DXShader() override;

const BinaryData& GetByteCode() const { return m_bytecode; }

ID3D11VertexShader* GetD3DVertexShader() const;
ID3D11GeometryShader* GetD3DGeometryShader() const;
ID3D11PixelShader* GetD3DPixelShader() const;
Expand Down
6 changes: 3 additions & 3 deletions Source/Core/VideoBackends/D3D/Render.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
6 changes: 3 additions & 3 deletions Source/Core/VideoBackends/D3D12/DXShader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
17 changes: 8 additions & 9 deletions Source/Core/VideoBackends/D3DCommon/Shader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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 ?
Expand All @@ -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)
Expand All @@ -125,16 +125,15 @@ 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)
{
BinaryData bytecode(length);
std::memcpy(bytecode.data(), data, length);
return bytecode;
const auto* const begin = static_cast<const u8*>(data);
const auto* const end = begin + length;

return {begin, end};
}

} // namespace D3DCommon
5 changes: 3 additions & 2 deletions Source/Core/VideoBackends/D3DCommon/Shader.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

#pragma once

#include <optional>
#include <string_view>
#include "VideoBackends/D3DCommon/Common.h"
#include "VideoCommon/AbstractShader.h"
Expand All @@ -19,8 +20,8 @@ class Shader : public AbstractShader

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);

Expand Down

0 comments on commit b0113b6

Please sign in to comment.