aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordan sinclair <dj2@everburning.com>2019-03-17 16:11:03 -0700
committerGitHub <noreply@github.com>2019-03-17 16:11:03 -0700
commitf9ccef4b3932b11f38e9ba93fbe951441573261e (patch)
tree219210db541102972a4223e52b042fe5b60faad1 /src
parentcd446e601f40ea9931c10652974a2aec9fa7f2ff (diff)
downloadamber-f9ccef4b3932b11f38e9ba93fbe951441573261e.tar.gz
Guard against missing framebuffer pointer (#376)
Diffstat (limited to 'src')
-rw-r--r--src/vulkan/engine_vulkan.cc8
-rw-r--r--src/vulkan/transfer_image.cc2
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_,