diff --git a/Source/Engine/Graphics/GPUDevice.cpp b/Source/Engine/Graphics/GPUDevice.cpp index 02c2765d0..50e8358ff 100644 --- a/Source/Engine/Graphics/GPUDevice.cpp +++ b/Source/Engine/Graphics/GPUDevice.cpp @@ -788,6 +788,8 @@ void GPUDevice::RenderEnd() void GPUDevice::OnCrash() { DumpResourcesToLog(); + + LOG(Info, "IsRendering: {}, VSync: {}, Resources: {}", IsRendering(), WasVSyncUsed(), _resources.Count()); } GPUTasksContext* GPUDevice::CreateTasksContext() diff --git a/Source/Engine/GraphicsDevice/DirectX/DX11/GPUBufferDX11.cpp b/Source/Engine/GraphicsDevice/DirectX/DX11/GPUBufferDX11.cpp index f324d5bdc..c858388c3 100644 --- a/Source/Engine/GraphicsDevice/DirectX/DX11/GPUBufferDX11.cpp +++ b/Source/Engine/GraphicsDevice/DirectX/DX11/GPUBufferDX11.cpp @@ -107,9 +107,17 @@ bool GPUBufferDX11::OnInit() data.SysMemPitch = bufferDesc.ByteWidth; data.SysMemSlicePitch = 0; } - VALIDATE_DIRECTX_CALL(_device->GetDevice()->CreateBuffer(&bufferDesc, _desc.InitData ? &data : nullptr, &_resource)); - if (!_resource) + HRESULT result = _device->GetDevice()->CreateBuffer(&bufferDesc, _desc.InitData ? &data : nullptr, &_resource); + if (FAILED(result)) + { + LOG(Error, "ID3D11Device::CreateBuffer failed"); + LOG_STR(Error, _desc.ToString()); +#if GPU_ENABLE_RESOURCE_NAMING + LOG_STR(Error, GetName()); +#endif + RenderToolsDX::LogD3DResult(result, __FILE__, __LINE__, true); return true; + } // Set state DX_SET_DEBUG_NAME(_resource, GetName()); diff --git a/Source/Engine/GraphicsDevice/DirectX/DX11/GPUTextureDX11.cpp b/Source/Engine/GraphicsDevice/DirectX/DX11/GPUTextureDX11.cpp index 2bf2e5f78..260ca6083 100644 --- a/Source/Engine/GraphicsDevice/DirectX/DX11/GPUTextureDX11.cpp +++ b/Source/Engine/GraphicsDevice/DirectX/DX11/GPUTextureDX11.cpp @@ -87,8 +87,16 @@ bool GPUTextureDX11::OnInit() result = device->CreateTexture2D(&textureDesc, nullptr, &texture); _resource = texture; } - LOG_DIRECTX_RESULT_WITH_RETURN(result, true); - ASSERT(_resource != nullptr); + if (FAILED(result)) + { + LOG(Error, "ID3D11Device::CreateTexture2D failed"); + LOG_STR(Error, _desc.ToString()); +#if GPU_ENABLE_RESOURCE_NAMING + LOG_STR(Error, GetName()); +#endif + RenderToolsDX::LogD3DResult(result, __FILE__, __LINE__); + return true; + } DX_SET_DEBUG_NAME(_resource, GetName()); // Update memory usage diff --git a/Source/Engine/GraphicsDevice/DirectX/DX12/GPUBufferDX12.cpp b/Source/Engine/GraphicsDevice/DirectX/DX12/GPUBufferDX12.cpp index f444fd64e..c917a2e29 100644 --- a/Source/Engine/GraphicsDevice/DirectX/DX12/GPUBufferDX12.cpp +++ b/Source/Engine/GraphicsDevice/DirectX/DX12/GPUBufferDX12.cpp @@ -133,7 +133,16 @@ bool GPUBufferDX12::OnInit() ID3D12Resource* resource; D3D12_RESOURCE_STATES initialState = D3D12_RESOURCE_STATE_COMMON; HRESULT result = _device->Allocator->CreateResource(&allocationDesc, &resourceDesc, initialState, nullptr, &_allocation, IID_PPV_ARGS(&resource)); - LOG_DIRECTX_RESULT_WITH_RETURN(result, true); + if (FAILED(result)) + { + LOG(Error, "CreatePlacedResource failed"); + LOG_STR(Error, _desc.ToString()); +#if GPU_ENABLE_RESOURCE_NAMING + LOG_STR(Error, GetName()); +#endif + RenderToolsDX::LogD3DResult(result, __FILE__, __LINE__); + return true; + } // Set state initResource(resource, initialState, 1); diff --git a/Source/Engine/GraphicsDevice/DirectX/DX12/GPUTextureDX12.cpp b/Source/Engine/GraphicsDevice/DirectX/DX12/GPUTextureDX12.cpp index 9e827900c..fd44cacc6 100644 --- a/Source/Engine/GraphicsDevice/DirectX/DX12/GPUTextureDX12.cpp +++ b/Source/Engine/GraphicsDevice/DirectX/DX12/GPUTextureDX12.cpp @@ -82,7 +82,16 @@ bool GPUTextureDX12::OnInit() resourceDesc.Flags = D3D12_RESOURCE_FLAG_NONE; allocationDesc.HeapType = D3D12_HEAP_TYPE_READBACK; HRESULT result = _device->Allocator->CreateResource(&allocationDesc, &resourceDesc, D3D12_RESOURCE_STATE_COPY_DEST, nullptr, &_allocation, IID_PPV_ARGS(&resource)); - LOG_DIRECTX_RESULT_WITH_RETURN(result, true); + if (FAILED(result)) + { + LOG(Error, "CreatePlacedResource failed"); + LOG_STR(Error, _desc.ToString()); +#if GPU_ENABLE_RESOURCE_NAMING + LOG_STR(Error, GetName()); +#endif + RenderToolsDX::LogD3DResult(result, __FILE__, __LINE__); + return true; + } initResource(resource, D3D12_RESOURCE_STATE_COPY_DEST, 1); DX_SET_DEBUG_NAME(_resource, GetName()); _memoryUsage = totalSize; @@ -146,7 +155,16 @@ bool GPUTextureDX12::OnInit() // Create texture allocationDesc.HeapType = D3D12_HEAP_TYPE_DEFAULT; HRESULT result = _device->Allocator->CreateResource(&allocationDesc, &resourceDesc, initialState, clearValuePtr, &_allocation, IID_PPV_ARGS(&resource)); - LOG_DIRECTX_RESULT_WITH_RETURN(result, true); + if (FAILED(result)) + { + LOG(Error, "CreatePlacedResource failed"); + LOG_STR(Error, _desc.ToString()); +#if GPU_ENABLE_RESOURCE_NAMING + LOG_STR(Error, GetName()); +#endif + RenderToolsDX::LogD3DResult(result, __FILE__, __LINE__); + return true; + } // Set state bool isRead = useSRV || useUAV; diff --git a/Source/Engine/GraphicsDevice/Vulkan/GPUBufferVulkan.cpp b/Source/Engine/GraphicsDevice/Vulkan/GPUBufferVulkan.cpp index 39f52e67a..98cc30b6a 100644 --- a/Source/Engine/GraphicsDevice/Vulkan/GPUBufferVulkan.cpp +++ b/Source/Engine/GraphicsDevice/Vulkan/GPUBufferVulkan.cpp @@ -139,7 +139,16 @@ bool GPUBufferVulkan::OnInit() allocInfo.usage = VMA_MEMORY_USAGE_GPU_ONLY; } const VkResult result = vmaCreateBuffer(_device->Allocator, &bufferInfo, &allocInfo, &_buffer, &_allocation, nullptr); - LOG_VULKAN_RESULT_WITH_RETURN(result); + if (result != VK_SUCCESS) + { + LOG(Error, "vmaCreateBuffer failed"); + LOG_STR(Error, _desc.ToString()); +#if GPU_ENABLE_RESOURCE_NAMING + LOG_STR(Error, GetName()); +#endif + RenderToolsVulkan::LogVkResult(result, __FILE__, __LINE__); + return true; + } #if GPU_ENABLE_RESOURCE_NAMING VK_SET_DEBUG_NAME(_device, _buffer, VK_OBJECT_TYPE_BUFFER, GetName()); #endif diff --git a/Source/Engine/GraphicsDevice/Vulkan/GPUTextureVulkan.cpp b/Source/Engine/GraphicsDevice/Vulkan/GPUTextureVulkan.cpp index 5a7d17f3f..523a5e221 100644 --- a/Source/Engine/GraphicsDevice/Vulkan/GPUTextureVulkan.cpp +++ b/Source/Engine/GraphicsDevice/Vulkan/GPUTextureVulkan.cpp @@ -318,7 +318,16 @@ bool GPUTextureVulkan::OnInit() VmaAllocationCreateInfo allocInfo = {}; allocInfo.usage = VMA_MEMORY_USAGE_GPU_ONLY; const VkResult result = vmaCreateImage(_device->Allocator, &imageInfo, &allocInfo, &_image, &_allocation, nullptr); - LOG_VULKAN_RESULT_WITH_RETURN(result); + if (result != VK_SUCCESS) + { + LOG(Error, "vmaCreateImage failed"); + LOG_STR(Error, _desc.ToString()); +#if GPU_ENABLE_RESOURCE_NAMING + LOG_STR(Error, GetName()); +#endif + RenderToolsVulkan::LogVkResult(result, __FILE__, __LINE__); + return true; + } #if GPU_ENABLE_RESOURCE_NAMING VK_SET_DEBUG_NAME(_device, _image, VK_OBJECT_TYPE_IMAGE, GetName()); #endif