diff options
author | dan sinclair <dj2@everburning.com> | 2019-03-17 16:11:03 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-03-17 16:11:03 -0700 |
commit | f9ccef4b3932b11f38e9ba93fbe951441573261e (patch) | |
tree | 219210db541102972a4223e52b042fe5b60faad1 /src | |
parent | cd446e601f40ea9931c10652974a2aec9fa7f2ff (diff) | |
download | amber-f9ccef4b3932b11f38e9ba93fbe951441573261e.tar.gz |
Guard against missing framebuffer pointer (#376)
Diffstat (limited to 'src')
-rw-r--r-- | src/vulkan/engine_vulkan.cc | 8 | ||||
-rw-r--r-- | src/vulkan/transfer_image.cc | 2 |
2 files changed, 7 insertions, 3 deletions
diff --git a/src/vulkan/engine_vulkan.cc b/src/vulkan/engine_vulkan.cc index 56cb652..bf6037d 100644 --- a/src/vulkan/engine_vulkan.cc +++ b/src/vulkan/engine_vulkan.cc @@ -409,7 +409,7 @@ Result EngineVulkan::DoProcessCommands(amber::Pipeline* pipeline) { Result EngineVulkan::GetFrameBuffer(Buffer* buffer, std::vector<Value>* values) { - values->resize(0); + values->clear(); // TODO(jaebaek): Support other formats if (buffer->AsFormatBuffer()->GetFormat().GetFormatType() != @@ -418,12 +418,16 @@ Result EngineVulkan::GetFrameBuffer(Buffer* buffer, } const uint8_t* cpu_memory = static_cast<const uint8_t*>(buffer->GetMemPtr()); + if (!cpu_memory) + return Result("Vulkan::GetFrameBuffer missing memory pointer"); + const auto texel_stride = buffer->AsFormatBuffer()->GetTexelStride(); const auto row_stride = buffer->AsFormatBuffer()->GetRowStride(); - Value pixel; for (uint32_t y = 0; y < buffer->GetHeight(); ++y) { for (uint32_t x = 0; x < buffer->GetWidth(); ++x) { + Value pixel; + const uint8_t* ptr_8 = cpu_memory + (row_stride * y) + (texel_stride * x); const uint32_t* ptr_32 = reinterpret_cast<const uint32_t*>(ptr_8); pixel.SetIntValue(*ptr_32); diff --git a/src/vulkan/transfer_image.cc b/src/vulkan/transfer_image.cc index ad33197..4a3f3b5 100644 --- a/src/vulkan/transfer_image.cc +++ b/src/vulkan/transfer_image.cc @@ -107,7 +107,7 @@ Result TransferImage::Initialize(VkImageUsageFlags usage) { // For images, we always make a secondary buffer. When the tiling of an image // is optimal, read/write data from CPU does not show correct values. We need - // a secondary buffer to convert the GPU-optimial data to CPU-readable data + // a secondary buffer to convert the GPU-optimal data to CPU-readable data // and vice versa. r = CreateVkBuffer( &host_accessible_buffer_, |