aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordan sinclair <dj2@everburning.com>2019-03-20 15:41:32 -0700
committerGitHub <noreply@github.com>2019-03-20 15:41:32 -0700
commitacd6a54bb84a2c7f4748457fbd934bacdd34c427 (patch)
tree24e287fb2bbba3d1d83f19e8843aa7695b9b9058
parent3acdaf91b5b2abb919e815d88cb668669743bf93 (diff)
downloadamber-acd6a54bb84a2c7f4748457fbd934bacdd34c427.tar.gz
[vulkan] Move GetFrameBuffer out of engine code. (#389)
This CL moves the GetFrameBuffer code up into the Amber object and removes from the engine code. There should be no engine specific work involved in retrieving the framebuffer.
-rw-r--r--src/amber.cc37
-rw-r--r--src/dawn/engine_dawn.cc4
-rw-r--r--src/dawn/engine_dawn.h1
-rw-r--r--src/engine.h4
-rw-r--r--src/executor_test.cc2
-rw-r--r--src/vulkan/engine_vulkan.cc33
-rw-r--r--src/vulkan/engine_vulkan.h1
7 files changed, 36 insertions, 46 deletions
diff --git a/src/amber.cc b/src/amber.cc
index c6cbe5f..324c2dd 100644
--- a/src/amber.cc
+++ b/src/amber.cc
@@ -28,6 +28,41 @@
#include "src/vkscript/parser.h"
namespace amber {
+namespace {
+
+const FormatType kDefaultFramebufferFormat = FormatType::kB8G8R8A8_UNORM;
+
+Result GetFrameBuffer(Buffer* buffer, std::vector<Value>* values) {
+ values->clear();
+
+ // TODO(jaebaek): Support other formats
+ if (buffer->AsFormatBuffer()->GetFormat().GetFormatType() !=
+ kDefaultFramebufferFormat) {
+ return Result("GetFrameBuffer Unsupported buffer format");
+ }
+
+ const uint8_t* cpu_memory = static_cast<const uint8_t*>(buffer->GetMemPtr());
+ if (!cpu_memory)
+ return Result("GetFrameBuffer missing memory pointer");
+
+ const auto texel_stride = buffer->AsFormatBuffer()->GetTexelStride();
+ const auto row_stride = buffer->AsFormatBuffer()->GetRowStride();
+
+ 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);
+ values->push_back(pixel);
+ }
+ }
+
+ return {};
+}
+
+} // namespace
Delegate::~Delegate() = default;
@@ -139,7 +174,7 @@ amber::Result Amber::ExecuteWithShaderData(const amber::Recipe* recipe,
buffer_info.width = buffer->GetWidth();
buffer_info.height = buffer->GetHeight();
- r = engine->GetFrameBuffer(buffer, &(buffer_info.values));
+ r = GetFrameBuffer(buffer, &(buffer_info.values));
if (!r.IsSuccess())
break;
diff --git a/src/dawn/engine_dawn.cc b/src/dawn/engine_dawn.cc
index 6cd5397..2b5880c 100644
--- a/src/dawn/engine_dawn.cc
+++ b/src/dawn/engine_dawn.cc
@@ -442,9 +442,5 @@ Result EngineDawn::CreateFramebufferIfNeeded() {
return {};
}
-Result EngineDawn::GetFrameBuffer(Buffer*, std::vector<Value>*) {
- return Result("Dawn::GetFrameBuffer not implemented");
-}
-
} // namespace dawn
} // namespace amber
diff --git a/src/dawn/engine_dawn.h b/src/dawn/engine_dawn.h
index 3fe8cab..c7c5ccf 100644
--- a/src/dawn/engine_dawn.h
+++ b/src/dawn/engine_dawn.h
@@ -60,7 +60,6 @@ class EngineDawn : public Engine {
Result DoPatchParameterVertices(
const PatchParameterVerticesCommand* cmd) override;
Result DoBuffer(const BufferCommand* cmd) override;
- Result GetFrameBuffer(Buffer*, std::vector<Value>* values) override;
private:
// Creates a command buffer builder if it doesn't already exist.
diff --git a/src/engine.h b/src/engine.h
index c46f505..34284e4 100644
--- a/src/engine.h
+++ b/src/engine.h
@@ -93,10 +93,6 @@ class Engine {
/// This covers both Vulkan buffers and images.
virtual Result DoBuffer(const BufferCommand* cmd) = 0;
- /// Copy the content of the framebuffer into |values|, each value is a pixel
- /// in R8G8B8A8 format.
- virtual Result GetFrameBuffer(Buffer* buffer, std::vector<Value>* values) = 0;
-
/// Sets the engine data to use.
void SetEngineData(const EngineData& data) { engine_data_ = data; }
diff --git a/src/executor_test.cc b/src/executor_test.cc
index a0adea8..60828a0 100644
--- a/src/executor_test.cc
+++ b/src/executor_test.cc
@@ -160,8 +160,6 @@ class EngineStub : public Engine {
return {};
}
- Result GetFrameBuffer(Buffer*, std::vector<Value>*) override { return {}; }
-
private:
bool fail_clear_command_ = false;
bool fail_clear_color_command_ = false;
diff --git a/src/vulkan/engine_vulkan.cc b/src/vulkan/engine_vulkan.cc
index cfefa66..29800ef 100644
--- a/src/vulkan/engine_vulkan.cc
+++ b/src/vulkan/engine_vulkan.cc
@@ -29,8 +29,6 @@ namespace amber {
namespace vulkan {
namespace {
-const FormatType kDefaultFramebufferFormat = FormatType::kB8G8R8A8_UNORM;
-
Result ToVkShaderStage(ShaderType type, VkShaderStageFlagBits* ret) {
switch (type) {
case kShaderTypeGeometry:
@@ -425,37 +423,6 @@ Result EngineVulkan::DoPatchParameterVertices(
return {};
}
-Result EngineVulkan::GetFrameBuffer(Buffer* buffer,
- std::vector<Value>* values) {
- values->clear();
-
- // TODO(jaebaek): Support other formats
- if (buffer->AsFormatBuffer()->GetFormat().GetFormatType() !=
- kDefaultFramebufferFormat) {
- return Result("Vulkan::GetFrameBuffer Unsupported buffer format");
- }
-
- 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();
-
- 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);
- values->push_back(pixel);
- }
- }
-
- return {};
-}
-
Result EngineVulkan::DoBuffer(const BufferCommand* cmd) {
auto& info = pipeline_map_[cmd->GetPipeline()];
if (cmd->IsPushConstant())
diff --git a/src/vulkan/engine_vulkan.h b/src/vulkan/engine_vulkan.h
index cec5533..7375d73 100644
--- a/src/vulkan/engine_vulkan.h
+++ b/src/vulkan/engine_vulkan.h
@@ -58,7 +58,6 @@ class EngineVulkan : public Engine {
Result DoPatchParameterVertices(
const PatchParameterVerticesCommand* cmd) override;
Result DoBuffer(const BufferCommand* cmd) override;
- Result GetFrameBuffer(Buffer* buffer, std::vector<Value>* values) override;
private:
struct PipelineInfo {