[Vulkan] Working build
authoradam.b <jsr184@gmail.com>
Fri, 16 Feb 2018 19:17:27 +0000 (19:17 +0000)
committerFrancisco Santos <f1.santos@samsung.com>
Sun, 18 Feb 2018 14:48:14 +0000 (14:48 +0000)
- able to render dali-demo and few other examples
- memory is constantly being allocated ( no proper management )
- validation layers turned off! ( better framerate, but less debug info )

Change-Id: Ib1f5265f03f9297f60795df2501324c51c21d237

31 files changed:
dali/graphics-api/graphics-api-controller.h
dali/graphics-api/graphics-api-generic-buffer.h
dali/graphics-api/graphics-api-render-command.h
dali/graphics-api/utility/utility-builder.h
dali/graphics/file.list
dali/graphics/graphics-controller.cpp
dali/graphics/graphics-controller.h
dali/graphics/vulkan/generated/spv-shaders-gen.cpp
dali/graphics/vulkan/generated/spv-shaders-gen.h
dali/graphics/vulkan/gpu-memory/vulkan-gpu-memory-allocator.h
dali/graphics/vulkan/gpu-memory/vulkan-gpu-memory-handle.h
dali/graphics/vulkan/scripts/shader-gen.sh [new file with mode: 0755]
dali/graphics/vulkan/shaders/basic-shader.vert
dali/graphics/vulkan/vulkan-buffer.cpp
dali/graphics/vulkan/vulkan-buffer.h
dali/graphics/vulkan/vulkan-command-buffer.cpp
dali/graphics/vulkan/vulkan-command-pool.cpp
dali/graphics/vulkan/vulkan-command-pool.h
dali/graphics/vulkan/vulkan-descriptor-set.cpp
dali/graphics/vulkan/vulkan-descriptor-set.h
dali/graphics/vulkan/vulkan-graphics-controller.cpp
dali/graphics/vulkan/vulkan-graphics-controller.h
dali/graphics/vulkan/vulkan-graphics.cpp
dali/graphics/vulkan/vulkan-graphics.h
dali/graphics/vulkan/vulkan-pipeline.cpp
dali/graphics/vulkan/vulkan-pipeline.h
dali/graphics/vulkan/vulkan-standalone-test.cpp
dali/graphics/vulkan/vulkan-surface.cpp
dali/graphics/vulkan/vulkan-types.h
dali/integration-api/graphics/graphics.cpp
dali/internal/update/graphics/graphics-algorithms.cpp

index 0bd9690..26a3df2 100644 (file)
@@ -46,6 +46,9 @@ namespace API
 class Controller
 {
 public:
+
+  virtual ~Controller() = default;
+
   /**
    * @brief Create a new object
    */
@@ -112,8 +115,6 @@ public:
   Controller( const Controller& ) = delete;
   Controller& operator=( const Controller& ) = delete;
 
-  virtual ~Controller() = default;
-
 protected:
   // derived types should not be moved direcly to prevent slicing
   Controller( Controller&& ) = default;
@@ -124,6 +125,8 @@ protected:
    */
   Controller() = default;
 
+
+
   /**
    * @brief create an element for the given number of elements and element size
    */
index 28a2726..dada456 100644 (file)
@@ -49,12 +49,12 @@ public:
 
   virtual ~GenericBufferBase() = default;
 
-protected:
   char* GetDataBase()
   {
     return mData.get();
   }
 
+protected:
   // derived types should not be moved direcly to prevent slicing
   GenericBufferBase( GenericBufferBase&& ) = default;
   GenericBufferBase& operator=( GenericBufferBase&& ) = default;
index 493b6ff..3f74a93 100644 (file)
@@ -59,6 +59,16 @@ public:
 
   ~RenderCommand() = default;
 
+  PrimitiveCount GetPrimitiveCount() const
+  {
+    return mPrimitiveCount;
+  }
+
+  const BufferList& GetBufferList() const
+  {
+    return mBufferList;
+  }
+
 private:
   PrimitiveCount mPrimitiveCount;
   BufferList     mBufferList;
index 9a8b3bd..b97bd06 100644 (file)
@@ -44,12 +44,12 @@ public:
   }
 
   template<typename Return>
-  operator Return() const
+  operator Return()
   {
     return Build( std::index_sequence_for<Params...>{} );
   }
 
-  auto Build() const
+  auto Build()
   {
     return Build( std::index_sequence_for<Params...>{} );
   }
@@ -77,9 +77,9 @@ private:
   }
 
   template<size_t... Is>
-  T Build( std::index_sequence<Is...> ) const
+  T Build( std::index_sequence<Is...> )
   {
-    return T(std::forward<Params>(std::get<Is>(std::forward<std::tuple<Params...>>( mParameters ) ))...);
+    return T(std::move(std::get<Is>( mParameters ) )...);
   }
 
 private: // data
@@ -90,4 +90,4 @@ private: // data
 } // namespace Graphics
 } // namespace Dali
 
-#endif // DALI_GRAPHICS_UTILITY_BUILDER_H
\ No newline at end of file
+#endif // DALI_GRAPHICS_UTILITY_BUILDER_H
index d963341..0860f36 100644 (file)
@@ -16,6 +16,7 @@ graphics_src_files = \
     $(graphics_src_dir)/vulkan/vulkan-buffer.cpp \
     $(graphics_src_dir)/vulkan/vulkan-graphics.cpp \
     $(graphics_src_dir)/vulkan/vulkan-shader.cpp \
-    $(graphics_src_dir)/vulkan/vulkan-graphics-controller.cpp
+    $(graphics_src_dir)/vulkan/vulkan-graphics-controller.cpp \
+    $(graphics_src_dir)/graphics-controller.cpp
 
 
index dcc9c8f..76ac13c 100644 (file)
@@ -75,5 +75,9 @@ void Controller::GetRenderItemList()
 {
 }
 
+Controller::Controller() = default;
+Controller::Controller(Controller&&) = default;
+Controller::~Controller() = default;
+
 } // namespace Graphics
 } // namespace Dali
index dff955e..9a8e3ce 100644 (file)
@@ -56,15 +56,15 @@ public:
   virtual void GetRenderItemList() override;
 
 public:
-  Controller() = default;
+  Controller();
 
   Controller(const Controller&) = delete;
   Controller& operator=(const Controller&) = delete;
 
-  Controller(Controller&&) = default;
+  Controller(Controller&&);
   Controller& operator=(Controller&&) = default;
 
-  virtual ~Controller() = default;
+  ~Controller() override;
 
 
 protected:
index 2ec5c3c..7cb07c3 100644 (file)
@@ -3,13 +3,13 @@
 #pragma GCC diagnostic ignored "-Wlarger-than="
 std::vector<uint8_t> VSH_CODE = {
   0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00,
-  0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00,
+  0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00,
   0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00,
   0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30,
   0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x04, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00,
-  0x0d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
+  0x0d, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00,
   0x03, 0x00, 0x03, 0x00, 0x02, 0x00, 0x00, 0x00, 0xae, 0x01, 0x00, 0x00,
   0x05, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e,
   0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x0b, 0x00, 0x00, 0x00,
@@ -22,18 +22,20 @@ std::vector<uint8_t> VSH_CODE = {
   0x0b, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x43,
   0x6c, 0x69, 0x70, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x00,
   0x05, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x05, 0x00, 0x04, 0x00, 0x11, 0x00, 0x00, 0x00, 0x77, 0x6f, 0x72, 0x6c,
-  0x64, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x11, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x4d, 0x61, 0x74,
-  0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x11, 0x00, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x76, 0x69, 0x65, 0x77, 0x4d, 0x61, 0x74, 0x00,
-  0x06, 0x00, 0x05, 0x00, 0x11, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-  0x70, 0x72, 0x6f, 0x6a, 0x4d, 0x61, 0x74, 0x00, 0x06, 0x00, 0x05, 0x00,
-  0x11, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x63, 0x6f, 0x6c, 0x6f,
-  0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x13, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x21, 0x00, 0x00, 0x00,
+  0x05, 0x00, 0x05, 0x00, 0x11, 0x00, 0x00, 0x00, 0x63, 0x6c, 0x69, 0x70,
+  0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x00, 0x06, 0x00, 0x05, 0x00,
+  0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x6c, 0x69, 0x70,
+  0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x13, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00,
+  0x77, 0x6f, 0x72, 0x6c, 0x64, 0x00, 0x00, 0x00, 0x06, 0x00, 0x04, 0x00,
+  0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x76, 0x70, 0x00,
+  0x06, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00,
+  0x18, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x73, 0x69, 0x7a, 0x65,
+  0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x1a, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x1f, 0x00, 0x00, 0x00,
   0x61, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00,
-  0x05, 0x00, 0x05, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x74, 0x72, 0x69, 0x43,
+  0x05, 0x00, 0x05, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x74, 0x72, 0x69, 0x43,
   0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00,
   0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00,
@@ -45,91 +47,95 @@ std::vector<uint8_t> VSH_CODE = {
   0x48, 0x00, 0x05, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00,
   0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x11, 0x00, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00,
-  0x11, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
-  0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x11, 0x00, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x48, 0x00, 0x04, 0x00, 0x11, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-  0x05, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x11, 0x00, 0x00, 0x00,
-  0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
-  0x48, 0x00, 0x05, 0x00, 0x11, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-  0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00,
-  0x11, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
-  0xc0, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x11, 0x00, 0x00, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x11, 0x00, 0x00, 0x00,
   0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00,
   0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
-  0x13, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x47, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x2b, 0x00, 0x00, 0x00,
-  0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00,
-  0x02, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00,
-  0x02, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00,
-  0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x2b, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x05, 0x00,
-  0x0b, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0x0a, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00,
-  0x03, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
-  0x0c, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
-  0x15, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00,
-  0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
-  0x1e, 0x00, 0x06, 0x00, 0x11, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
-  0x20, 0x00, 0x04, 0x00, 0x12, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-  0x11, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x12, 0x00, 0x00, 0x00,
-  0x13, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
-  0x0e, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-  0x20, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00,
-  0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00,
-  0x1f, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
-  0x20, 0x00, 0x04, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x1f, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x20, 0x00, 0x00, 0x00,
-  0x21, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f,
-  0x20, 0x00, 0x04, 0x00, 0x29, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
-  0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x29, 0x00, 0x00, 0x00,
-  0x2b, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
-  0x0e, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
-  0x20, 0x00, 0x04, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+  0x13, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x48, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x05, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x48, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00,
+  0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
+  0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00,
+  0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
+  0x47, 0x00, 0x03, 0x00, 0x18, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+  0x47, 0x00, 0x04, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x1a, 0x00, 0x00, 0x00,
+  0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
+  0x1f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x47, 0x00, 0x04, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00,
+  0x21, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+  0x16, 0x00, 0x03, 0x00, 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+  0x17, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00,
+  0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
+  0x08, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x1c, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0x09, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00,
+  0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00,
+  0x20, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+  0x0b, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00,
+  0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00,
+  0x0e, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x2b, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x03, 0x00,
+  0x11, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
+  0x12, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
+  0x3b, 0x00, 0x04, 0x00, 0x12, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
+  0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00,
+  0x02, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00,
+  0x17, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+  0x1e, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x07, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
+  0x19, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
+  0x3b, 0x00, 0x04, 0x00, 0x19, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
+  0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x1e, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
+  0x1e, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x2b, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00,
+  0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x22, 0x00, 0x00, 0x00,
+  0x02, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f,
+  0x20, 0x00, 0x04, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+  0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x2c, 0x00, 0x00, 0x00,
+  0x2e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
+  0x0e, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x20, 0x00, 0x04, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
   0x07, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x02, 0x00, 0x00, 0x00,
   0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
   0xf8, 0x00, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
-  0x15, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
-  0x14, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x17, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
-  0x15, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
-  0x18, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x1a, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x92, 0x00, 0x05, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00,
-  0x1a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x15, 0x00, 0x00, 0x00,
-  0x1c, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00,
-  0x1c, 0x00, 0x00, 0x00, 0x92, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x1e, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00,
-  0x21, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0x24, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
-  0x22, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00,
+  0x14, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
+  0x0f, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x16, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
+  0x14, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
+  0x0f, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x1c, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x92, 0x00, 0x05, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00,
+  0x1c, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x17, 0x00, 0x00, 0x00,
+  0x20, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
+  0x22, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
+  0x21, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x17, 0x00, 0x00, 0x00,
+  0x24, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
+  0x17, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+  0x24, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0x27, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
+  0x25, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
   0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00,
-  0x27, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
-  0x26, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x91, 0x00, 0x05, 0x00,
-  0x07, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
-  0x27, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x29, 0x00, 0x00, 0x00,
-  0x2a, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00,
-  0x3e, 0x00, 0x03, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
-  0x41, 0x00, 0x05, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00,
-  0x13, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x07, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00,
-  0x3e, 0x00, 0x03, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00,
+  0x2a, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
+  0x29, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x91, 0x00, 0x05, 0x00,
+  0x07, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00,
+  0x2a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x2c, 0x00, 0x00, 0x00,
+  0x2d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00,
+  0x3e, 0x00, 0x03, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
+  0x41, 0x00, 0x05, 0x00, 0x30, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00,
+  0x1a, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x07, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00,
+  0x3e, 0x00, 0x03, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00,
   0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00
 };
 std::vector<uint8_t> FSH_CODE = {
index 716b7ff..90d6511 100644 (file)
@@ -13,17 +13,22 @@ layout( location = 0 ) in vec3 aPosition;
 
 layout( set = 0, binding = 0, std140 ) uniform world
 {
-    mat4 modelMat;
-    mat4 viewMat;
-    mat4 projMat;
+    mat4 mvp;
     vec4 color;
+    vec3 size;
+};
+
+layout( set = 0, binding = 1, std140 ) uniform clipUniform
+{
+    mat4 clip;
 };
 
 layout( location = 0 ) out vec4 triColor;
 
 void main()
 {
-    gl_Position = projMat * viewMat * modelMat * vec4( aPosition, 1.0 );
+    gl_Position = clip * mvp * vec4( aPosition* size, 1.0 );
+    //gl_Position = vec4( aPosition, 1.0 );
     triColor = color;
 }*/
 
index 14d9b39..5d5cd1e 100644 (file)
@@ -58,7 +58,7 @@ public:
    * @param memoryProperties
    * @return
    */
-  virtual GpuMemoryBlockRef Allocate( const Handle<Buffer>& buffer, vk::MemoryPropertyFlags memoryProperties ) = 0;
+  virtual GpuMemoryBlockRef Allocate( const BufferRef& buffer, vk::MemoryPropertyFlags memoryProperties ) = 0;
 
   /**
    *
index 65933a1..6f8836f 100644 (file)
@@ -45,6 +45,17 @@ public:
   void* Map();
 
   /**
+   * Returns mapped memory to specified type
+   * @tparam T
+   * @return
+   */
+  template<class T>
+  T* MapTyped()
+  {
+    return reinterpret_cast<T*>(Map());
+  }
+
+  /**
    *
    * @param offset
    * @param size
diff --git a/dali/graphics/vulkan/scripts/shader-gen.sh b/dali/graphics/vulkan/scripts/shader-gen.sh
new file mode 100755 (executable)
index 0000000..4f06d16
--- /dev/null
@@ -0,0 +1,47 @@
+#!/bin/bash
+
+
+. setenv-local
+
+shaders_dir=./dali-core/dali/graphics/vulkan/shaders
+generated_dir=./dali-core/dali/graphics/vulkan/generated
+
+shaders="
+${shaders_dir}/basic-shader.vert|VSH_CODE|vert
+${shaders_dir}/basic-shader.frag|FSH_CODE|frag"
+
+echo "// Autogenerated" > ${generated_dir}/spv-shaders-gen.h
+echo -e "#ifndef SPV_GENERATED_HEADER
+#define SPV_GENERATED_HEADER
+#include <vector>\n#include <cstdint>\n\n" >> ${generated_dir}/spv-shaders-gen.h
+
+echo "// Autogenerated" > ${generated_dir}/spv-shaders-gen.cpp
+echo "#include \"spv-shaders-gen.h\"" > ${generated_dir}/spv-shaders-gen.cpp
+echo "#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored \"-Wlarger-than=\"" >> ${generated_dir}/spv-shaders-gen.cpp
+
+for f in ${shaders} ; do
+    fname=$(echo $f | awk -F '|' '{print $1}')
+    varname=$(echo $f | awk -F '|' '{print $2}')
+    stagename=$(echo $f | awk -F '|' '{print $3}')
+    out=/tmp/$(basename ${fname}).spv
+    ${VULKAN_SDK}/bin/glslangValidator -V1.0 -S ${stagename} ${fname} -o ${out}
+    echo "std::vector<uint8_t> $varname = {" >> ${generated_dir}/spv-shaders-gen.cpp
+    xxd -i ${out} | tail -n +2 | head -n -2 >> ${generated_dir}/spv-shaders-gen.cpp
+    echo "};" >> ${generated_dir}/spv-shaders-gen.cpp
+    echo "extern std::vector<uint8_t> $varname;" >> ${generated_dir}/spv-shaders-gen.h
+
+    echo "/*" >> ${generated_dir}/spv-shaders-gen.h
+    cat $fname >> ${generated_dir}/spv-shaders-gen.h
+    echo -e "*/\n\n" >> ${generated_dir}/spv-shaders-gen.h
+
+done
+
+echo "#pragma GCC diagnostic pop" >> ${generated_dir}/spv-shaders-gen.cpp
+
+echo -e "#endif // SPV_GENERATED_HEADER\n\n" >> ${generated_dir}/spv-shaders-gen.h
+
+
+
+
+
index 6f1988f..d60999c 100644 (file)
@@ -4,16 +4,21 @@ layout( location = 0 ) in vec3 aPosition;
 
 layout( set = 0, binding = 0, std140 ) uniform world
 {
-    mat4 modelMat;
-    mat4 viewMat;
-    mat4 projMat;
+    mat4 mvp;
     vec4 color;
+    vec3 size;
+};
+
+layout( set = 0, binding = 1, std140 ) uniform clipUniform
+{
+    mat4 clip;
 };
 
 layout( location = 0 ) out vec4 triColor;
 
 void main()
 {
-    gl_Position = projMat * viewMat * modelMat * vec4( aPosition, 1.0 );
+    gl_Position = clip * mvp * vec4( aPosition* size, 1.0 );
+    //gl_Position = vec4( aPosition, 1.0 );
     triColor = color;
 }
\ No newline at end of file
index 445ebb1..b443b69 100644 (file)
@@ -167,8 +167,8 @@ void Buffer::BindMemory( const GpuMemoryBlockRef& handle )
 
 bool Buffer::OnDestroy()
 {
-  mImpl->mGraphics.RemoveBuffer( *this );
-  return true;
+  //mImpl->mGraphics.RemoveBuffer( *this );
+  return false;
 }
 
 
index 5f223ab..a83b005 100644 (file)
@@ -107,6 +107,9 @@ private:
    */
   Buffer(Graphics& graphics, const vk::BufferCreateInfo& createInfo);
 
+  Buffer( const Buffer& ) = delete;
+  Buffer& operator =( const Buffer& ) = delete;
+
 private:
 
   class Impl;
index 4082b2f..bef027a 100644 (file)
@@ -97,6 +97,9 @@ struct CommandBuffer::Impl
     }
 
     VkAssert( mCommandBuffer.begin( info ) );
+
+    mResources.clear();
+
     mRecording = true;
   }
 
@@ -112,6 +115,8 @@ struct CommandBuffer::Impl
     assert( !mRecording && "Can't reset command buffer during recording!" );
     assert( mCommandBuffer && "Invalid command buffer!" );
     mCommandBuffer.reset( vk::CommandBufferResetFlagBits::eReleaseResources );
+
+    mResources.clear();
   }
 
   void Free()
index 7b5de98..7da7982 100644 (file)
@@ -56,6 +56,13 @@ struct CommandPool::Impl
     return true;
   }
 
+
+  void Reset( bool releaseResources )
+  {
+    mGraphics.GetDevice().resetCommandPool( mCommandPool, releaseResources ? vk::CommandPoolResetFlagBits::eReleaseResources : vk::CommandPoolResetFlags{} );
+    mAllocatedCommandBuffers.clear();
+  }
+
   Handle<CommandBuffer> NewCommandBuffer( const vk::CommandBufferAllocateInfo& allocateInfo )
   {
     vk::CommandBufferAllocateInfo info( allocateInfo );
@@ -119,18 +126,22 @@ bool CommandPool::OnDestroy()
   return false;
 }
 
-Handle<CommandBuffer> CommandPool::NewCommandBuffer( const vk::CommandBufferAllocateInfo& allocateInfo )
+CommandBufferRef CommandPool::NewCommandBuffer( const vk::CommandBufferAllocateInfo& allocateInfo )
 {
   return mImpl->NewCommandBuffer( allocateInfo );
 }
 
-Handle<CommandBuffer> CommandPool::NewCommandBuffer( bool isPrimary )
+CommandBufferRef CommandPool::NewCommandBuffer( bool isPrimary )
 {
   return mImpl->NewCommandBuffer( vk::CommandBufferAllocateInfo{}.setLevel(
     isPrimary ? vk::CommandBufferLevel::ePrimary : vk::CommandBufferLevel::eSecondary
   ) );
 }
 
+void CommandPool::Reset( bool releaseResources )
+{
+  mImpl->Reset( releaseResources );
+}
 
 } // namespace Vulkan
 } // namespace Graphics
index e04ec44..9614722 100644 (file)
@@ -68,18 +68,23 @@ public:
   Graphics& GetGraphics() const;
 
   /**
+   * Resets command pool
+   */
+  void Reset( bool releaseResources );
+
+  /**
    *
    * @param allocateInfo
    * @return
    */
-  Handle<CommandBuffer> NewCommandBuffer( const vk::CommandBufferAllocateInfo& allocateInfo );
+  CommandBufferRef NewCommandBuffer( const vk::CommandBufferAllocateInfo& allocateInfo );
 
   /**
    *
    * @param isPrimary
    * @return
    */
-  Handle<CommandBuffer> NewCommandBuffer( bool isPrimary = true );
+  CommandBufferRef NewCommandBuffer( bool isPrimary = true );
 
 public:
 
index 65a56f9..67495d0 100644 (file)
@@ -64,6 +64,12 @@ struct DescriptorPool::Impl
     return retval;
   }
 
+  void Reset()
+  {
+    mGraphics.GetDevice().resetDescriptorPool( mVkDescriptorPool );
+    mDescriptorSetCache.clear();
+  }
+
   bool Initialise()
   {
     mVkDescriptorPool = VkAssert( mGraphics.GetDevice().createDescriptorPool( mCreateInfo, mGraphics.GetAllocator() ) );
@@ -107,6 +113,11 @@ std::vector<DescriptorSetHandle> DescriptorPool::AllocateDescriptorSets( vk::Des
   return mImpl->AllocateDescriptorSets( allocateInfo );
 }
 
+void DescriptorPool::Reset()
+{
+  mImpl->Reset();
+}
+
 /****************************************************************************************
  * Class DescriptorSet::Impl
  */
@@ -126,7 +137,8 @@ struct DescriptorSet::Impl
   {
     if(mVkDescriptorSet)
     {
-      mGraphics.GetDevice().freeDescriptorSets( mPool.GetVkDescriptorPool(), 1, &mVkDescriptorSet );
+      // TODO: @todo non freeable!!!
+      //mGraphics.GetDevice().freeDescriptorSets( mPool.GetVkDescriptorPool(), 1, &mVkDescriptorSet );
     }
   }
 
index e2d48e9..3b1da88 100644 (file)
@@ -94,6 +94,11 @@ public:
 
   std::vector<DescriptorSetHandle> AllocateDescriptorSets( vk::DescriptorSetAllocateInfo allocateInfo );
 
+  /**
+   * Resets descriptor pool
+   */
+  void Reset();
+
 private:
 
   DescriptorPool( Graphics& graphics, const vk::DescriptorPoolCreateInfo& createInfo );
index 3d3364e..95a7371 100644 (file)
@@ -1,4 +1,24 @@
+#include "generated/spv-shaders-gen.h"
+
+#include <glm/glm.hpp>
+#include <glm/gtc/matrix_transform.hpp>
+#include <glm/matrix.hpp>
+#include <glm/vector_relational.hpp>
+
+#include <dali/graphics/vulkan/gpu-memory/vulkan-gpu-memory-allocator.h>
+#include <dali/graphics/vulkan/gpu-memory/vulkan-gpu-memory-handle.h>
+#include <dali/graphics/vulkan/gpu-memory/vulkan-gpu-memory-manager.h>
+#include <dali/graphics/vulkan/vulkan-buffer.h>
+#include <dali/graphics/vulkan/vulkan-command-buffer.h>
+#include <dali/graphics/vulkan/vulkan-command-pool.h>
+#include <dali/graphics/vulkan/vulkan-descriptor-set.h>
 #include <dali/graphics/vulkan/vulkan-graphics-controller.h>
+#include <dali/graphics/vulkan/vulkan-graphics.h>
+#include <dali/graphics/vulkan/vulkan-pipeline.h>
+#include <dali/graphics/vulkan/vulkan-shader.h>
+#include <dali/graphics/vulkan/vulkan-surface.h>
+
+using namespace glm;
 
 namespace Dali
 {
@@ -6,9 +26,268 @@ namespace Graphics
 {
 namespace Vulkan
 {
+static const mat4 CLIP_MATRIX(
+  1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f, 0.0f, 0.0f, 0.5f, 1.0f );
+
+struct Controller::Impl
+{
+  struct State
+  {
+    ShaderRef                     vertexShader;
+    ShaderRef                     fragmentShader;
+    DescriptorPoolRef             descriptorPool;
+    PipelineRef                   pipeline;
+    BufferRef                     vertexBuffer;
+    BufferRef                     uniformBuffer0;
+    BufferRef                     uniformBuffer1; // clip matrix
+    std::vector<DescriptorSetRef> descriptorSets;
+    CommandPoolRef                commandPool;
+    CommandBufferRef              drawCommand;
+
+    std::vector<CommandBufferRef> drawCommandPool; // max 1024 secondary buffers
+    uint32_t                      drawPoolIndex{0u};
+  };
+
+  Impl( Controller& owner, Dali::Graphics::Vulkan::Graphics& graphics )
+  : mGraphics( graphics ),
+    mOwner( owner ),
+    mDefaultAllocator( mGraphics.GetDeviceMemoryManager().GetDefaultAllocator() )
+  {
+  }
+
+  ~Impl()
+  {
+  }
+
+  // TODO: @todo this function initialises basic buffers, shaders and pipeline
+  // for the prototype ONLY
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wframe-larger-than="
+  bool Initialise()
+  {
+    // create shaders
+    auto bindings =
+      std::vector<vk::DescriptorSetLayoutBinding>{// francisco buffer
+                                                  vk::DescriptorSetLayoutBinding{}
+                                                    .setBinding( 0 )
+                                                    .setStageFlags( vk::ShaderStageFlagBits::eVertex )
+                                                    .setDescriptorType( vk::DescriptorType::eUniformBuffer )
+                                                    .setDescriptorCount( 1 ),
+                                                  // clip matrix
+                                                  vk::DescriptorSetLayoutBinding{}
+                                                    .setBinding( 1 )
+                                                    .setStageFlags( vk::ShaderStageFlagBits::eVertex )
+                                                    .setDescriptorType( vk::DescriptorType::eUniformBuffer )
+                                                    .setDescriptorCount( 1 )};
+
+    mDebugPipelineState.vertexShader = Shader::New( mGraphics, VSH_CODE.data(), VSH_CODE.size() );
+    mDebugPipelineState.vertexShader->SetDescriptorSetLayout(
+      0, vk::DescriptorSetLayoutCreateInfo{}.setBindingCount( 2 ).setPBindings( bindings.data() ) );
+
+    mDebugPipelineState.fragmentShader = Shader::New( mGraphics, FSH_CODE.data(), FSH_CODE.size() );
+
+    mDebugPipelineState.descriptorPool = CreateDescriptorPool();
+
+    const float halfWidth = 0.5f;
+    const float halfHeight = 0.5f;
+//#if 0
+    const vec3 VERTICES[4] =
+                  {
+                    { halfWidth,  halfHeight, 0.0f },
+                    { halfWidth, -halfHeight, 0.0f },
+                    { -halfWidth,  halfHeight, 0.0f },
+                    { -halfWidth, -halfHeight, 0.0f },
+                  };
+//#endif
+#if 0
+    const vec3 VERTICES[4] = {
+      {-halfWidth, -halfHeight, 0.0f},
+      {halfWidth,  -halfHeight, 0.0f},
+      {halfWidth,  halfHeight, 0.0f},
+      {-halfWidth, halfHeight, 0.0f}
+    };
+#endif
+    mDebugPipelineState.vertexBuffer = Buffer::New( mGraphics, sizeof( VERTICES[0] ) * 4, Buffer::Type::VERTEX );
+    auto& defaultAllocator           = mGraphics.GetDeviceMemoryManager().GetDefaultAllocator();
+    mDebugPipelineState.vertexBuffer->BindMemory(
+      defaultAllocator.Allocate( mDebugPipelineState.vertexBuffer, vk::MemoryPropertyFlagBits::eHostVisible ) );
+
+    auto ptr = mDebugPipelineState.vertexBuffer->GetMemoryHandle()->MapTyped<vec3>();
+    std::copy( VERTICES, VERTICES + 4, ptr );
+    mDebugPipelineState.vertexBuffer->GetMemoryHandle()->Unmap();
+
+    // create command pool
+    mDebugPipelineState.commandPool = CommandPool::New( mGraphics );
+
+    CreatePipeline( mDebugPipelineState );
+
+    // allocated descriptor pool ( 1024 sets, 1024 uniform buffers )
+    auto size = vk::DescriptorPoolSize{}.setDescriptorCount( 1024 ).setType( vk::DescriptorType::eUniformBuffer );
+    mDebugPipelineState.descriptorPool = DescriptorPool::New(
+      mGraphics, vk::DescriptorPoolCreateInfo{}.setPoolSizeCount( 1 ).setPPoolSizes( &size ).setMaxSets( 1024 ) );
+
+    mDebugPipelineState.uniformBuffer1 = Buffer::New( mGraphics, sizeof( CLIP_MATRIX ), Buffer::Type::UNIFORM );
+    mDebugPipelineState.uniformBuffer1->BindMemory(
+      mDefaultAllocator.Allocate( mDebugPipelineState.uniformBuffer1, vk::MemoryPropertyFlagBits::eHostVisible ) );
+
+    auto clipPtr = mDebugPipelineState.uniformBuffer1->GetMemoryHandle()->MapTyped<mat4>();
+    std::copy( &CLIP_MATRIX, &CLIP_MATRIX + 1, clipPtr );
+    mDebugPipelineState.uniformBuffer1->GetMemoryHandle()->Unmap();
+
+    return true;
+  }
+
+  PipelineRef CreatePipeline( State& state )
+  {
+    auto pipeline = Pipeline::New( mGraphics );
+
+    pipeline->SetShader( state.vertexShader, Shader::Type::VERTEX );
+    pipeline->SetShader( state.fragmentShader, Shader::Type::FRAGMENT );
+
+    auto size = mGraphics.GetSurface( 0u ).GetSize();
+    pipeline->SetViewport( 0, 0, static_cast<float>( size.width ), static_cast<float>( size.height ) );
+
+    pipeline->SetVertexInputState(
+      std::vector<vk::VertexInputAttributeDescription>{
+        vk::VertexInputAttributeDescription{}.setBinding( 0 ).setOffset( 0 ).setLocation( 0 ).setFormat(
+          vk::Format::eR32G32B32Sfloat )},
+      std::vector<vk::VertexInputBindingDescription>{vk::VertexInputBindingDescription{}
+                                                       .setBinding( 0 )
+                                                       .setStride( sizeof( vec3 ) )
+                                                       .setInputRate( vk::VertexInputRate::eVertex )} );
+    pipeline->SetInputAssemblyState( vk::PrimitiveTopology::eTriangleStrip, false );
+
+    if( !pipeline->Compile() )
+    {
+      pipeline.Reset();
+    }
+
+    state.pipeline = pipeline;
+    return pipeline;
+  }
+
+  void SubmitCommand( API::RenderCommand&& command )
+  {
+    auto& state = mDebugPipelineState;
+
+    const auto& bufferList = command.GetBufferList();
+    auto        drawcalls  = command.GetPrimitiveCount();
+
+    // create pool of commands to be re-recorded
+    if( state.drawCommandPool.empty() )
+    {
+      for( auto i = 0u; i < 1024; ++i )
+      {
+        state.drawCommandPool.push_back( state.commandPool->NewCommandBuffer( false ) );
+      }
+    }
+
+    uint32_t                      stride = sizeof( mat4 ) + sizeof( vec4 ) + sizeof( vec3 );
+    std::vector<CommandBufferRef> executeCommands;
+    for( auto&& buf : bufferList.Get() )
+    {
+      // TODO: @todo implement minimum offset!
+      const uint32_t sizeOfUniformBuffer = U32((buf->GetSize() / drawcalls.Get()));
+      const uint32_t uniformBlockOffsetStride = ((sizeOfUniformBuffer / 256)+1)*256;
+      const uint32_t uniformBlockMemoryNeeded = U32(uniformBlockOffsetStride*drawcalls.Get());
+
+      // create buffer if doesn't exist
+      if( !state.uniformBuffer0 )
+      {
+        state.uniformBuffer0 = Buffer::New( mGraphics, uniformBlockMemoryNeeded, Buffer::Type::UNIFORM );
+      }
+      if( state.uniformBuffer0->GetSize() < uniformBlockMemoryNeeded || !state.uniformBuffer0->GetMemoryHandle() )
+      {
+        // allocate and bind memory if needed ( buffer increased size or buffer hasn't been bound yet )
+        state.uniformBuffer0->BindMemory(
+          mDefaultAllocator.Allocate( state.uniformBuffer0, vk::MemoryPropertyFlagBits::eHostVisible ) );
+      }
+
+      // fill memory
+
+      struct UB
+      {
+        mat4 mvp;
+        vec4 color;
+        vec3 size;
+      } __attribute__((aligned(16)));
+
+      auto memory = state.uniformBuffer0->GetMemoryHandle();
+      auto outPtr = memory->MapTyped<char>();
+      for( auto i = 0u; i < drawcalls.Get(); ++i )
+      {
+        // copy chunk of data
+        UB* inputData = (reinterpret_cast<UB*>(buf->GetDataBase())) + i;
+        UB* outputData = (reinterpret_cast<UB*>(outPtr + (i*uniformBlockOffsetStride)));
+        *outputData = *inputData;
+
+        auto descriptorSets = state.descriptorPool->AllocateDescriptorSets(
+          vk::DescriptorSetAllocateInfo{}.setDescriptorSetCount( 1 ).setPSetLayouts(
+            state.vertexShader->GetDescriptorSetLayouts().data() ) );
+
+        descriptorSets[0]->WriteUniformBuffer( 0, state.uniformBuffer0, i * uniformBlockOffsetStride, stride );
+        descriptorSets[0]->WriteUniformBuffer( 1, state.uniformBuffer1, 0, state.uniformBuffer1->GetSize() );
+
+        // record draw call
+        auto cmdbuf = state.commandPool->NewCommandBuffer( false );
+        cmdbuf->Begin( vk::CommandBufferUsageFlagBits::eRenderPassContinue );
+        cmdbuf->BindVertexBuffer( 0, state.vertexBuffer, 0 );
+        cmdbuf->BindGraphicsPipeline( state.pipeline );
+        cmdbuf->BindDescriptorSets( descriptorSets, 0 );
+        cmdbuf->Draw( 4, 1, 0, 0 );
+        cmdbuf->End();
+
+        executeCommands.push_back( cmdbuf );
+      }
+
+      memory->Unmap();
+
+      // execute buffer
+      mGraphics.GetSurface( 0u ).GetCurrentCommandBuffer()->ExecuteCommands( executeCommands );
+
+      // break, one pass only
+      break;
+    }
+  }
+#pragma GCC diagnostic pop
+  void BeginFrame()
+  {
+    auto& surface = mGraphics.GetSurface( 0u );
+    surface.AcquireNextImage();
+
+    // rewind pools
+    mDebugPipelineState.drawPoolIndex = 0u;
+    mDebugPipelineState.descriptorPool->Reset();
+    mDebugPipelineState.commandPool->Reset( true );
+  }
+
+  void EndFrame()
+  {
+    auto& surface = mGraphics.GetSurface( 0u );
+    surface.Present();
+  }
+
+  DescriptorPoolRef CreateDescriptorPool()
+  {
+    vk::DescriptorPoolSize size;
+    size.setDescriptorCount( 1024 ).setType( vk::DescriptorType::eUniformBuffer );
+
+    // TODO: how to organize this???
+    auto pool = DescriptorPool::New(
+      mGraphics, vk::DescriptorPoolCreateInfo{}.setMaxSets( 1024 ).setPoolSizeCount( 1 ).setPPoolSizes( &size ) );
+    return pool;
+  }
+
+  Graphics&           mGraphics;
+  Controller&         mOwner;
+  GpuMemoryAllocator& mDefaultAllocator;
+
+  State mDebugPipelineState;
+};
+
 // TODO: @todo temporarily ignore missing return type, will be fixed later
 #pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wreturn-type"
+#pragma GCC diagnostic     ignored "-Wreturn-type"
 API::Accessor<API::Shader> Controller::CreateShader( const API::BaseFactory<API::Shader>& factory )
 {
 }
@@ -36,22 +315,45 @@ API::Accessor<API::Sampler> Controller::CreateSampler( const API::BaseFactory<AP
 API::Accessor<API::Framebuffer> Controller::CreateFramebuffer( const API::BaseFactory<API::Framebuffer>& factory )
 {
 }
+
+std::unique_ptr<char> Controller::CreateBuffer( size_t numberOfElements, size_t elementSize )
+{
+  return std::unique_ptr<char>( new char[numberOfElements * elementSize] );
+}
+
 #pragma GCC diagnostic pop
 
+std::unique_ptr<Controller> Controller::New( Graphics& vulkanGraphics )
+{
+  return std::make_unique<Controller>( vulkanGraphics );
+}
+
+Controller::Controller( Graphics& vulkanGraphics ) : mImpl( std::make_unique<Impl>( *this, vulkanGraphics ) )
+{
+  mImpl->Initialise();
+}
+
+Controller::~Controller()       = default;
+Controller::Controller()        = default;
+Controller& Controller::operator=( Controller&& ) = default;
+
 void Controller::GetRenderItemList()
 {
 }
 
 void Controller::SubmitCommand( API::RenderCommand&& command )
 {
+  mImpl->SubmitCommand( std::move( command ) );
 }
 
 void Controller::BeginFrame()
 {
+  mImpl->BeginFrame();
 }
 
 void Controller::EndFrame()
 {
+  mImpl->EndFrame();
 }
 
 } // namespace Vulkan
index 69e41a7..7713c03 100644 (file)
@@ -27,12 +27,24 @@ namespace Graphics
 {
 namespace Vulkan
 {
+class Graphics;
+
 /**
  * @brief Interface class for Manager types in the graphics API.
  */
-class Controller : public Graphics::Controller
+class Controller : public Dali::Graphics::Controller
 {
 public:
+
+  explicit Controller( Vulkan::Graphics& vulkanGraphics );
+
+  /**
+   * Must be created from VulkanGraphics
+   * @param vulkanGraphics
+   * @return
+   */
+  static std::unique_ptr<Controller> New( Vulkan::Graphics& vulkanGraphics );
+
   /**
    * @brief Create a new object
    */
@@ -68,12 +80,14 @@ public:
    */
   API::Accessor<API::Framebuffer> CreateFramebuffer( const API::BaseFactory<API::Framebuffer>& factory ) override;
 
+  std::unique_ptr<char> CreateBuffer( size_t numberOfElements, size_t elementSize ) override;
+
   /**
    * @brief Get a render list
    */
   void GetRenderItemList() override;
 
-  void SubmitCommand(API::RenderCommand&& command) override;
+  void SubmitCommand( API::RenderCommand&& command ) override;
 
   void BeginFrame() override;
 
@@ -84,23 +98,21 @@ public:
   Controller( const Controller& ) = delete;
   Controller& operator=( const Controller& ) = delete;
 
-  virtual ~Controller() = default;
+  ~Controller() override;
 
 protected:
   // derived types should not be moved direcly to prevent slicing
-  Controller( Controller&& ) = default;
-  Controller& operator=( Controller&& ) = default;
+  Controller( Controller&& );
+  Controller& operator=( Controller&& );
 
   /**
    * Objects of this type should not directly.
    */
-  Controller() = default;
+  Controller();
 
 private:
-
   struct Impl;
   std::unique_ptr<Impl> mImpl;
-
 };
 
 } // namespace Vulkan
index ae4b42e..d1ea784 100644 (file)
@@ -29,6 +29,9 @@
 #include <dali/graphics/vulkan/vulkan-shader.h>
 #include <dali/graphics/vulkan/vulkan-descriptor-set.h>
 #include <dali/graphics/vulkan/vulkan-framebuffer.h>
+#include <dali/graphics/vulkan/vulkan-graphics-controller.h>
+
+#include <dali/graphics-api/graphics-api-controller.h>
 
 #ifndef VK_KHR_XLIB_SURFACE_EXTENSION_NAME
 #define VK_KHR_XLIB_SURFACE_EXTENSION_NAME "VK_KHR_xlib_surface"
@@ -87,6 +90,16 @@ Platform Graphics::GetDefaultPlatform() const
 #endif
 }
 
+Dali::Graphics::API::Controller& Graphics::GetController()
+{
+  if(!mGfxController)
+  {
+    mGfxController = Dali::Graphics::Vulkan::Controller::New(*this);
+  }
+
+  return *mGfxController.get();
+}
+
 std::vector<const char*> Graphics::PrepareDefaultInstanceExtensions()
 {
   auto extensions = vk::enumerateInstanceExtensionProperties();
@@ -194,7 +207,8 @@ void Graphics::CreateInstance( const std::vector<const char*>& extensions, const
 
   info.setEnabledExtensionCount(U32(extensions.size()))
       .setPpEnabledExtensionNames(extensions.data())
-      .setEnabledLayerCount(U32(validationLayers.size()))
+      //.setEnabledLayerCount(U32(validationLayers.size()))
+      .setEnabledLayerCount(0)
       .setPpEnabledLayerNames(validationLayers.data());
 
   mInstance = VkAssert(vk::createInstance(info, *mAllocator));
index aa5298e..8d4fafa 100644 (file)
@@ -30,6 +30,10 @@ namespace Dali
 {
 namespace Graphics
 {
+namespace API
+{
+class Controller;
+}
 using SurfaceFactory = Dali::Integration::Graphics::SurfaceFactory;
 
 namespace Vulkan
@@ -52,6 +56,8 @@ class Surface;
 class CommandPool;
 class DescriptorPool;
 class GpuMemoryManager;
+class Controller;
+
 class Graphics
 {
 
@@ -99,6 +105,8 @@ public:
 
   Platform GetDefaultPlatform() const;
 
+  Dali::Graphics::API::Controller& GetController();
+
 private:
 
   void                                     CreateInstance( const std::vector<const char*>& extensions, const std::vector<const char*>& validationLayers );
@@ -167,6 +175,9 @@ private:
   std::vector<CommandPoolRef>           mCommandPoolCache;
   std::vector<DescriptorPoolRef>        mDescriptorPoolCache;
   std::vector<FramebufferRef>           mFramebufferCache;
+
+private:
+  std::unique_ptr<Dali::Graphics::Vulkan::Controller>           mGfxController;
 };
 
 } // namespace Vulkan
index e9c0219..e7ca9ea 100644 (file)
@@ -178,7 +178,7 @@ struct Pipeline::Impl
     mRasterizationState.setDepthBiasClamp( 0.0f );
     mRasterizationState.setDepthBiasEnable( false );
     mRasterizationState.setDepthClampEnable( false );
-    mRasterizationState.setFrontFace( vk::FrontFace::eClockwise );
+    mRasterizationState.setFrontFace( vk::FrontFace::eCounterClockwise );
     mRasterizationState.setPolygonMode( vk::PolygonMode::eFill );
     mRasterizationState.setRasterizerDiscardEnable( false );
     mRasterizationState.setLineWidth( 1.0f );
index 0dbef6f..9197f4e 100644 (file)
@@ -39,7 +39,7 @@ public:
    * @param info
    * @return
    */
-  static Handle<Pipeline> New( Graphics& graphics, const vk::GraphicsPipelineCreateInfo& info );
+  static Handle<Pipeline> New( Graphics& graphics, const vk::GraphicsPipelineCreateInfo& info = vk::GraphicsPipelineCreateInfo{} );
 
   /**
    * Destructor
index 8c6bded..bb4cafd 100644 (file)
@@ -244,10 +244,14 @@ Dali::Graphics::Vulkan::GpuMemoryBlockRef test_gpu_memory_manager(
 
 struct UniformData
 {
-  mat4 modelMat;
-  mat4 viewMat;
-  mat4 projMat;
+  mat4 mvp;
   vec4 color;
+  vec3 size;
+} __attribute__( ( aligned( 16 ) ) );
+
+struct UniformClipData
+{
+  mat4 clip;
 } __attribute__( ( aligned( 16 ) ) );
 
 mat4 MVP;
@@ -265,17 +269,17 @@ void update_translation( Dali::Graphics::Vulkan::BufferRef buffer )
   static float x = 0.0f;
   x += 0.5f;
 
+  /*
   UniformData ub;
-  ub.modelMat = mat4{1.0f};
-  ub.modelMat = glm::translate( ub.modelMat, vec3( x, x, 0.0f ) );
-  ub.modelMat = glm::rotate( ub.modelMat, glm::radians( x ), glm::vec3( 0.0f, 0.0f, 1.0f ) );
-  ub.viewMat  = lookAt( vec3( 0.0f, 0.0f, 10.0f ), vec3( 0.0f, 0.0f, 0.0f ), vec3( 0.0f, 1.0f, 0.0f ) );
 
-  glm::mat4 clip( 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f, 0.0f, 0.0f, 0.5f, 1.0f );
+  auto modelMat = glm::translate( mat4{1}, vec3( x, x, 0.0f ) );
+  modelMat      = glm::rotate( modelMat, glm::radians( x ), glm::vec3( 0.0f, 0.0f, 1.0f ) );
+
+  ub.mvp = ortho( 0.0f, 640.0f, 480.0f, 0.0f, 0.0f, 100.0f ) *
+           lookAt( vec3( 0.0f, 0.0f, 10.0f ), vec3( 0.0f, 0.0f, 0.0f ), vec3( 0.0f, 1.0f, 0.0f ) ) * modelMat;
 
-  ub.projMat = clip * ortho( 0.0f, 640.0f, 480.0f, 0.0f, 0.0f, 100.0f );
-  ub.color   = vec4( x / 640.0f, x / 480.0f, 1.0f, 1.0f );
   update_buffer( buffer, ub );
+   */
 }
 
 Dali::Graphics::Vulkan::BufferRef create_uniform_buffer( Dali::Graphics::Vulkan::Graphics& gr )
@@ -292,20 +296,32 @@ Dali::Graphics::Vulkan::BufferRef create_uniform_buffer( Dali::Graphics::Vulkan:
 
   auto ub = reinterpret_cast<UniformData*>( memory->Map() );
 
-  ub->modelMat = mat4{1.0f};
-  //ub->modelMat = glm::translate( ub->modelMat, vec3( 0.0f, 0.0f, 0.0f ));
+  ub->mvp = mat4{1.0f} * ortho( 0.0f, 640.0f, 480.0f, 0.0f, 0.0f, 100.0f ) *
+            lookAt( vec3( 0.0f, 0.0f, 10.0f ), vec3( 0.0f, 0.0f, 0.0f ), vec3( 0.0f, 1.0f, 0.0f ) );
+  ub->color = vec4( 0.0f, 1.0f, 1.0f, 1.0f );
+  ub->size  = vec3( 1.0f, 1.0f, 1.0f );
 
-  ub->viewMat = lookAt( vec3( 0.0f, 0.0f, 10.0f ), vec3( 0.0f, 0.0f, 0.0f ), vec3( 0.0f, 1.0f, 0.0f ) );
+  memory->Unmap();
 
-  glm::mat4 clip( 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f, 0.0f, 0.0f, 0.5f, 1.0f );
+  return uniformBuffer;
+}
 
-  ub->projMat = clip * ortho( 0.0f, 640.0f, 480.0f, 0.0f, 0.0f, 100.0f );
-  ub->color   = vec4( 0.0f, 1.0f, 1.0f, 1.0f );
+Dali::Graphics::Vulkan::BufferRef create_clip_buffer( Dali::Graphics::Vulkan::Graphics& gr )
+{
+  const glm::mat4 clip(
+    1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f, 0.0f, 0.0f, 0.5f, 1.0f );
 
-  MVP = ub->projMat * ub->viewMat * ub->modelMat;
+  // create uniform buffer
+  auto uniformBuffer = Buffer::New( gr, sizeof( UniformClipData ), Buffer::Type::UNIFORM );
 
+  // allocate memory
+  auto memory = gr.GetDeviceMemoryManager().GetDefaultAllocator().Allocate( uniformBuffer,
+                                                                            vk::MemoryPropertyFlagBits::eHostVisible );
+  // bind memory
+  uniformBuffer->BindMemory( memory );
+  auto dst = memory->MapTyped<mat4>();
+  std::copy( &clip, &clip + 1, dst );
   memory->Unmap();
-
   return uniformBuffer;
 }
 
@@ -430,11 +446,16 @@ int RunTestMain()
   auto vertexShader = Shader::New( gr, VSH_CODE.data(), VSH_CODE.size() );
   vertexShader->SetDescriptorSetLayout(
     0,
-    vk::DescriptorSetLayoutCreateInfo{}.setBindingCount( 1 ).setPBindings(
+    vk::DescriptorSetLayoutCreateInfo{}.setBindingCount( 2 ).setPBindings(
       std::vector<vk::DescriptorSetLayoutBinding>{vk::DescriptorSetLayoutBinding{}
                                                     .setBinding( 0 )
                                                     .setStageFlags( vk::ShaderStageFlagBits::eVertex )
                                                     .setDescriptorType( vk::DescriptorType::eUniformBuffer )
+                                                    .setDescriptorCount( 1 ),
+                                                  vk::DescriptorSetLayoutBinding{}
+                                                    .setBinding( 1 )
+                                                    .setStageFlags( vk::ShaderStageFlagBits::eVertex )
+                                                    .setDescriptorType( vk::DescriptorType::eUniformBuffer )
                                                     .setDescriptorCount( 1 )}
         .data() ) );
 
@@ -466,7 +487,10 @@ int RunTestMain()
 
   auto uniformBuffer = create_uniform_buffer( gr );
 
+  auto clipBuffer = create_clip_buffer( gr );
+
   descriptorSet[0]->WriteUniformBuffer( 0, uniformBuffer, 0, uniformBuffer->GetSize() );
+  descriptorSet[0]->WriteUniformBuffer( 1, clipBuffer, 0, clipBuffer->GetSize() );
 
   // get new buffer
   auto cmdDraw = commandPool->NewCommandBuffer( false );
index 3547724..a0a9d7a 100644 (file)
@@ -121,7 +121,7 @@ void Surface::BeginRenderPass()
     if(r > 1.0f)
       r -= 1.0f;
 
-    clearValues[0].color.setFloat32({0.0f, 1.0f, 0.0f, 1.0f});
+    clearValues[0].color.setFloat32({0.0f, 0.0f, 0.0f, 1.0f});
     clearValues[1].depthStencil.setDepth(1.0f).setStencil(0.0f);
 
     auto rpInfo = vk::RenderPassBeginInfo{};
index bf0f292..b0f0132 100644 (file)
@@ -345,6 +345,7 @@ using DescriptorPoolRef = Handle<class DescriptorPool>;
 using CommandPoolRef = Handle<class CommandPool>;
 using CommandBufferRef = Handle<class CommandBuffer>;
 using GpuMemoryBlockRef = Handle<class GpuMemoryBlock>;
+using DescriptorSetRef = Handle<class DescriptorSet>;
 /*
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wframe-larger-than="
index e674292..5728f21 100644 (file)
@@ -18,7 +18,7 @@
 #include <dali/graphics/vulkan/vulkan-types.h>
 #include <dali/graphics/vulkan/vulkan-graphics.h>
 #include <dali/graphics/vulkan/vulkan-surface.h>
-
+#include <dali/graphics-api/graphics-api-controller.h>
 #include <dali/integration-api/graphics/graphics.h>
 
 namespace Dali
@@ -80,8 +80,7 @@ void Graphics::PreRender(Dali::Graphics::FBID framebufferId)
 
 Dali::Graphics::API::Controller& Graphics::GetController()
 {
-  auto ptr = this;
-  return *reinterpret_cast<Dali::Graphics::API::Controller*>(ptr);
+  return mGraphicsImpl->GetController();
 }
 
 /*
index 41d8cd5..2f53a40 100644 (file)
@@ -73,8 +73,8 @@ void SubmitRenderItemList( Graphics::API::Controller&           graphics,
   buffers.emplace_back(std::move(uniformBuffer));
 
   commandBuilder.Set( Graphics::API::BufferList{std::move(buffers)} );
// auto cmd = commandBuilder.Build();
// graphics.SubmitCommand( std::move(cmd) );
+  auto cmd = commandBuilder.Build();
+  graphics.SubmitCommand( std::move(cmd) );
 }
 
 void SubmitInstruction( Graphics::API::Controller& graphics,