diff --git a/TR5Main/Renderer/Renderer11Init.cpp b/TR5Main/Renderer/Renderer11Init.cpp index 6bd99368f..2ff93173a 100644 --- a/TR5Main/Renderer/Renderer11Init.cpp +++ b/TR5Main/Renderer/Renderer11Init.cpp @@ -172,7 +172,7 @@ void T5M::Renderer::Renderer11::Initialise(int w, int h, int refreshRate, bool w shadowSamplerDesc.ComparisonFunc = D3D11_COMPARISON_LESS_EQUAL; shadowSamplerDesc.Filter = D3D11_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT; Utils::throwIfFailed(m_device->CreateSamplerState(&shadowSamplerDesc,m_shadowSampler.GetAddressOf())); - Utils::setName(m_shadowSampler.Get(), "ShadowSampler"); + m_shadowSampler->SetPrivateData(WKPDID_D3DDebugObjectName, sizeof("ShadowSampler") + 1, "ShadowSampler"); initialiseBars(); initQuad(m_device.Get()); } diff --git a/TR5Main/Renderer/Utils.cpp b/TR5Main/Renderer/Utils.cpp index ab0cd9a37..541ff155c 100644 --- a/TR5Main/Renderer/Utils.cpp +++ b/TR5Main/Renderer/Utils.cpp @@ -17,26 +17,36 @@ namespace T5M::Renderer::Utils { } - ComPtr compileVertexShader(ID3D11Device* device, const std::wstring& fileName, const std::string& function, const std::string& model, const D3D_SHADER_MACRO * defines, ComPtr& bytecode) noexcept { + ComPtr compileVertexShader(ID3D11Device* device, const std::wstring& fileName, const std::string& function, const std::string& model, const D3D_SHADER_MACRO * defines, ComPtr& bytecode) { ComPtr errors; logD("Compiling vertex shader"); throwIfFailed(D3DCompileFromFile(fileName.c_str(), defines, D3D_COMPILE_STANDARD_FILE_INCLUDE, function.c_str(), model.c_str(), GetShaderFlags(), 0, bytecode.GetAddressOf(),errors.GetAddressOf())); - ID3D11VertexShader* shader = nullptr; - throwIfFailed(device->CreateVertexShader(bytecode->GetBufferPointer(), bytecode->GetBufferSize(), nullptr, &shader)); + ComPtr shader; + throwIfFailed(device->CreateVertexShader(bytecode->GetBufferPointer(), bytecode->GetBufferSize(), nullptr, shader.GetAddressOf())); + if constexpr(DebugBuild){ + char buffer[100]; + size_t sz = std::wcstombs(buffer, fileName.c_str(), 100); + shader->SetPrivateData(WKPDID_D3DDebugObjectName, sz, buffer); + } return shader; } - ComPtr compilePixelShader(ID3D11Device* device, const wstring& fileName, const string& function, const string& model, const D3D_SHADER_MACRO* defines, ComPtr& bytecode) noexcept { + ComPtr compilePixelShader(ID3D11Device* device, const wstring& fileName, const string& function, const string& model, const D3D_SHADER_MACRO* defines, ComPtr& bytecode) { ComPtr errors; logD("Compiling pixel shader"); UINT flags = D3DCOMPILE_ENABLE_STRICTNESS | D3DCOMPILE_DEBUG | D3DCOMPILE_PACK_MATRIX_ROW_MAJOR | D3DCOMPILE_SKIP_OPTIMIZATION; throwIfFailed(D3DCompileFromFile(fileName.c_str(), defines, D3D_COMPILE_STANDARD_FILE_INCLUDE, function.c_str(), model.c_str(), GetShaderFlags(), 0, bytecode.GetAddressOf(), errors.GetAddressOf())); - ID3D11PixelShader* shader = nullptr; - throwIfFailed(device->CreatePixelShader(bytecode->GetBufferPointer(), bytecode->GetBufferSize(), nullptr, &shader)); + ComPtr shader; + throwIfFailed(device->CreatePixelShader(bytecode->GetBufferPointer(), bytecode->GetBufferSize(), nullptr, shader.GetAddressOf())); + if constexpr(DebugBuild){ + char buffer[100]; + size_t sz = std::wcstombs(buffer, fileName.c_str(), 100); + shader->SetPrivateData(WKPDID_D3DDebugObjectName, sz, buffer); + } return shader; } - UINT Utils::GetShaderFlags() noexcept + constexpr UINT Utils::GetShaderFlags() { UINT flags = D3DCOMPILE_ENABLE_STRICTNESS | D3DCOMPILE_PACK_MATRIX_ROW_MAJOR; if constexpr(DebugBuild){ diff --git a/TR5Main/Renderer/Utils.h b/TR5Main/Renderer/Utils.h index 4acf7fd6b..331bf2ba0 100644 --- a/TR5Main/Renderer/Utils.h +++ b/TR5Main/Renderer/Utils.h @@ -6,16 +6,10 @@ namespace T5M { namespace Renderer { namespace Utils { void throwIfFailed(const HRESULT& res) noexcept; - [[nodiscard]]Microsoft::WRL::ComPtr compileVertexShader(ID3D11Device* device, const std::wstring& fileName, const std::string& function, const std::string& model, const D3D_SHADER_MACRO* defines, Microsoft::WRL::ComPtr& bytecode) noexcept; - [[nodiscard]]UINT GetShaderFlags() noexcept; - [[nodiscard]]Microsoft::WRL::ComPtr compilePixelShader(ID3D11Device* device, const std::wstring& fileName, const std::string& function, const std::string& model, const D3D_SHADER_MACRO* defines, Microsoft::WRL::ComPtr& bytecode) noexcept; - template - void setName(T* object, const std::string& name) - { - ID3D11DeviceChild* childPtr = nullptr; - object->QueryInterface(&childPtr); - childPtr->SetPrivateData(WKPDID_D3DDebugObjectName, name.length(), name.c_str()); - }; + [[nodiscard]] Microsoft::WRL::ComPtr compileVertexShader(ID3D11Device* device, const std::wstring& fileName, const std::string& function, const std::string& model, const D3D_SHADER_MACRO* defines, Microsoft::WRL::ComPtr& bytecode); + constexpr [[nodiscard]] UINT GetShaderFlags(); + [[nodiscard]] Microsoft::WRL::ComPtr compilePixelShader(ID3D11Device* device, const std::wstring& fileName, const std::string& function, const std::string& model, const D3D_SHADER_MACRO* defines, Microsoft::WRL::ComPtr& bytecode); + } } } \ No newline at end of file