[Vulkan] Pipeline safeguards
authoradam.b <jsr184@gmail.com>
Fri, 25 May 2018 15:48:18 +0000 (16:48 +0100)
committeradam.b <jsr184@gmail.com>
Fri, 25 May 2018 15:48:18 +0000 (16:48 +0100)
Added safeguards checking whether pipeline is compatible
with renderer.

Change-Id: I4654f8148a8381be5d3f41e79332833edc1c775d

16 files changed:
dali/graphics/vulkan/api/internal/vulkan-ubo-manager.cpp
dali/graphics/vulkan/api/internal/vulkan-ubo-manager.h
dali/graphics/vulkan/api/internal/vulkan-ubo-pool.cpp
dali/graphics/vulkan/api/internal/vulkan-ubo-pool.h
dali/graphics/vulkan/api/vulkan-api-buffer-factory.cpp
dali/graphics/vulkan/api/vulkan-api-buffer-factory.h
dali/graphics/vulkan/api/vulkan-api-buffer.cpp
dali/graphics/vulkan/api/vulkan-api-buffer.h
dali/graphics/vulkan/api/vulkan-api-controller.cpp
dali/graphics/vulkan/api/vulkan-api-render-command.cpp
dali/graphics/vulkan/api/vulkan-api-render-command.h
dali/graphics/vulkan/vulkan-graphics.cpp
dali/graphics/vulkan/vulkan-graphics.h
dali/internal/update/graphics/graphics-algorithms.cpp
dali/internal/update/manager/update-manager.cpp
dali/internal/update/rendering/scene-graph-renderer.cpp

index fc4c698..c3e3941 100644 (file)
@@ -18,8 +18,6 @@
 #include <dali/graphics/vulkan/api/internal/vulkan-ubo-manager.h>
 #include <dali/graphics/vulkan/api/internal/vulkan-ubo-pool.h>
 
 #include <dali/graphics/vulkan/api/internal/vulkan-ubo-manager.h>
 #include <dali/graphics/vulkan/api/internal/vulkan-ubo-pool.h>
 
-#include <unordered_map>
-
 #define debug( x ) std::cout << x << std::endl;
 
 namespace Dali
 #define debug( x ) std::cout << x << std::endl;
 
 namespace Dali
index ad58277..45e8c7d 100644 (file)
@@ -24,16 +24,11 @@ namespace Dali
 {
 namespace Graphics
 {
 {
 namespace Graphics
 {
-namespace Vulkan
-{
-class Controller;
-}
 namespace VulkanAPI
 {
 namespace VulkanAPI
 {
-using Controller = Vulkan::Controller;
+class Controller;
 class Ubo;
 
 class Ubo;
 
-
 class UboManager
 {
 public:
 class UboManager
 {
 public:
index b147db5..72c387a 100644 (file)
 #include <dali/graphics/vulkan/api/internal/vulkan-ubo-pool.h>
 #include <dali/graphics/vulkan/vulkan-graphics.h>
 #include <dali/graphics/vulkan/vulkan-buffer.h>
 #include <dali/graphics/vulkan/api/internal/vulkan-ubo-pool.h>
 #include <dali/graphics/vulkan/vulkan-graphics.h>
 #include <dali/graphics/vulkan/vulkan-buffer.h>
-#include <dali/graphics/vulkan/vulkan-graphics-controller.h>
+#include <dali/graphics/vulkan/api/vulkan-api-controller.h>
 #include <dali/graphics/vulkan/gpu-memory/vulkan-gpu-memory-manager.h>
 #include <dali/graphics/vulkan/gpu-memory/vulkan-gpu-memory-allocator.h>
 
 #include <deque>
 #include <dali/graphics/vulkan/gpu-memory/vulkan-gpu-memory-manager.h>
 #include <dali/graphics/vulkan/gpu-memory/vulkan-gpu-memory-allocator.h>
 
 #include <deque>
-#include <iostream>
+
 
 #define debug( x ) std::cout << x << std::endl;
 
 
 #define debug( x ) std::cout << x << std::endl;
 
index ccc6e73..ee21087 100644 (file)
@@ -26,14 +26,11 @@ namespace Dali
 {
 namespace Graphics
 {
 {
 namespace Graphics
 {
-namespace Vulkan
-{
-class Controller;
-}
 namespace VulkanAPI
 {
 namespace VulkanAPI
 {
-using Controller = Vulkan::Controller;
+class Controller;
 class Ubo;
 class Ubo;
+
 class UboPool
 {
 public:
 class UboPool
 {
 public:
index b8e80fd..9bbe138 100644 (file)
 #include <dali/graphics/vulkan/api/vulkan-api-buffer.h>
 #include <dali/graphics/vulkan/vulkan-graphics.h>
 #include <dali/graphics/vulkan/vulkan-buffer.h>
 #include <dali/graphics/vulkan/api/vulkan-api-buffer.h>
 #include <dali/graphics/vulkan/vulkan-graphics.h>
 #include <dali/graphics/vulkan/vulkan-buffer.h>
-#include <dali/graphics/vulkan/vulkan-graphics-controller.h>
+#include <dali/graphics/vulkan/api/vulkan-api-controller.h>
 namespace Dali
 {
 namespace Graphics
 {
 namespace VulkanAPI
 {
 namespace Dali
 {
 namespace Graphics
 {
 namespace VulkanAPI
 {
-BufferFactory::BufferFactory( Vulkan::Controller& controller )
+BufferFactory::BufferFactory( Controller& controller )
 : mController( controller ), mGraphics(controller.GetGraphics() )
 {
 
 : mController( controller ), mGraphics(controller.GetGraphics() )
 {
 
index 22bfcaa..d1a5f9a 100644 (file)
@@ -29,15 +29,15 @@ namespace Graphics
 namespace Vulkan
 {
 class Graphics;
 namespace Vulkan
 {
 class Graphics;
-class Controller;
 }
 namespace VulkanAPI
 {
 }
 namespace VulkanAPI
 {
+class Controller;
 class BufferFactory : public Dali::Graphics::API::BufferFactory
 {
 public:
 
 class BufferFactory : public Dali::Graphics::API::BufferFactory
 {
 public:
 
-  explicit BufferFactory( Vulkan::Controller& controller );
+  explicit BufferFactory( Controller& controller );
 
   VulkanAPI::BufferFactory& SetUsage( API::Buffer::UsageHint usage ) override;
 
 
   VulkanAPI::BufferFactory& SetUsage( API::Buffer::UsageHint usage ) override;
 
@@ -47,7 +47,7 @@ public:
 
 private:
 
 
 private:
 
-  Vulkan::Controller&         mController;
+  Controller&                 mController;
   Vulkan::Graphics&           mGraphics;
   vk::BufferUsageFlagBits     mUsage;
   API::Buffer::UsageHint      mUsageHints;
   Vulkan::Graphics&           mGraphics;
   vk::BufferUsageFlagBits     mUsage;
   API::Buffer::UsageHint      mUsageHints;
index 080316b..eacf487 100644 (file)
@@ -20,8 +20,8 @@
 #include <dali/graphics/vulkan/vulkan-buffer.h>
 #include <dali/graphics/vulkan/gpu-memory/vulkan-gpu-memory-allocator.h>
 #include <dali/graphics/vulkan/gpu-memory/vulkan-gpu-memory-manager.h>
 #include <dali/graphics/vulkan/vulkan-buffer.h>
 #include <dali/graphics/vulkan/gpu-memory/vulkan-gpu-memory-allocator.h>
 #include <dali/graphics/vulkan/gpu-memory/vulkan-gpu-memory-manager.h>
-#include <dali/graphics/vulkan/vulkan-graphics-controller.h>
-#include <memory>
+#include <dali/graphics/vulkan/api/vulkan-api-controller.h>
+
 namespace Dali
 {
 namespace Graphics
 namespace Dali
 {
 namespace Graphics
@@ -29,7 +29,7 @@ namespace Graphics
 namespace VulkanAPI
 {
 
 namespace VulkanAPI
 {
 
-Buffer::Buffer( Vulkan::Controller& controller, vk::BufferUsageFlagBits usage, API::Buffer::UsageHint usageHints, uint32_t size )
+Buffer::Buffer( Controller& controller, vk::BufferUsageFlagBits usage, API::Buffer::UsageHint usageHints, uint32_t size )
 : mController( controller ), mGraphics( controller.GetGraphics() ), mUsageHints( usageHints ), mSize( size )
 {
 
 : mController( controller ), mGraphics( controller.GetGraphics() ), mUsageHints( usageHints ), mSize( size )
 {
 
index 6428331..eeb0e10 100644 (file)
@@ -29,13 +29,9 @@ namespace Dali
 {
 namespace Graphics
 {
 {
 namespace Graphics
 {
-namespace Vulkan
-{
-class Controller;
-}
 namespace VulkanAPI
 {
 namespace VulkanAPI
 {
-
+class Controller;
 
 /**
  * Buffer represents a Buffer-type resource
 
 /**
  * Buffer represents a Buffer-type resource
@@ -44,7 +40,7 @@ class Buffer : public Graphics::API::Buffer
 {
 public:
 
 {
 public:
 
-  explicit Buffer( Vulkan::Controller& controller, vk::BufferUsageFlagBits usage, API::Buffer::UsageHint usageHints, uint32_t size );
+  explicit Buffer( Controller& controller, vk::BufferUsageFlagBits usage, API::Buffer::UsageHint usageHints, uint32_t size );
 
   bool Initialise();
 
 
   bool Initialise();
 
@@ -71,7 +67,7 @@ public:
 
 private:
 
 
 private:
 
-  Vulkan::Controller& mController;
+  Controller& mController;
   Vulkan::Graphics& mGraphics;
   vk::BufferUsageFlagBits mUsage{ vk::BufferUsageFlagBits::eVertexBuffer};
   API::Buffer::UsageHint mUsageHints;
   Vulkan::Graphics& mGraphics;
   vk::BufferUsageFlagBits mUsage{ vk::BufferUsageFlagBits::eVertexBuffer};
   API::Buffer::UsageHint mUsageHints;
index 3fec95f..7a79f27 100644 (file)
@@ -257,16 +257,6 @@ API::Accessor<API::Texture> Controller::CreateTexture( const API::BaseFactory<AP
   return API::Accessor<API::Texture>( mImpl->mTexturesOwner, handle);
 }
 
   return API::Accessor<API::Texture>( mImpl->mTexturesOwner, handle);
 }
 
-API::Accessor<API::TextureSet> Controller::CreateTextureSet( const API::BaseFactory<API::TextureSet>& factory )
-{
-  return { nullptr };
-}
-
-API::Accessor<API::DynamicBuffer> Controller::CreateDynamicBuffer( const API::BaseFactory<API::DynamicBuffer>& factory )
-{
-  return { nullptr };
-}
-
 API::Accessor<API::Buffer> Controller::CreateBuffer( const API::BaseFactory<API::Buffer>& factory )
 {
   auto handle = mImpl->mBuffersOwner.CreateObject( factory );
 API::Accessor<API::Buffer> Controller::CreateBuffer( const API::BaseFactory<API::Buffer>& factory )
 {
   auto handle = mImpl->mBuffersOwner.CreateObject( factory );
@@ -275,11 +265,6 @@ API::Accessor<API::Buffer> Controller::CreateBuffer( const API::BaseFactory<API:
   return API::Accessor<API::Buffer>( mImpl->mBuffersOwner, handle);
 }
 
   return API::Accessor<API::Buffer>( mImpl->mBuffersOwner, handle);
 }
 
-API::Accessor<API::StaticBuffer> Controller::CreateStaticBuffer( const API::BaseFactory<API::StaticBuffer>& factory )
-{
-  return { nullptr };
-}
-
 API::Accessor<API::Sampler> Controller::CreateSampler( const API::BaseFactory<API::Sampler>& factory )
 {
   return { nullptr };
 API::Accessor<API::Sampler> Controller::CreateSampler( const API::BaseFactory<API::Sampler>& factory )
 {
   return { nullptr };
index 72dbf18..404f683 100644 (file)
@@ -34,7 +34,7 @@
 
 #include <dali/graphics/vulkan/api/internal/vulkan-ubo-manager.h>
 #include <dali/graphics/vulkan/api/internal/vulkan-ubo-pool.h>
 
 #include <dali/graphics/vulkan/api/internal/vulkan-ubo-manager.h>
 #include <dali/graphics/vulkan/api/internal/vulkan-ubo-pool.h>
-#include <dali/graphics/vulkan/vulkan-graphics-controller.h>
+#include <dali/graphics/vulkan/api/vulkan-api-controller.h>
 
 #include <iostream>
 #define debug( x ) std::cout << x << std::endl;
 
 #include <iostream>
 #define debug( x ) std::cout << x << std::endl;
index 61f3252..9b60f19 100644 (file)
@@ -22,8 +22,6 @@
 #include <dali/graphics-api/graphics-api-shader-details.h>
 #include <dali/graphics/vulkan/vulkan-types.h>
 
 #include <dali/graphics-api/graphics-api-shader-details.h>
 #include <dali/graphics/vulkan/vulkan-types.h>
 
-//#include <dali/graphics/vulkan/vulkan-command-buffer.h>
-
 namespace Dali
 {
 namespace Graphics
 namespace Dali
 {
 namespace Graphics
@@ -31,13 +29,10 @@ namespace Graphics
 namespace Vulkan
 {
 class PipelineCache;
 namespace Vulkan
 {
 class PipelineCache;
-class Controller;
 }
 namespace VulkanAPI
 {
 }
 namespace VulkanAPI
 {
-
-using Controller = Vulkan::Controller;
-
+class Controller;
 class Ubo;
 
 /**
 class Ubo;
 
 /**
index dd3758f..0a0ffbd 100644 (file)
@@ -29,7 +29,7 @@
 #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-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/vulkan/api/vulkan-api-controller.h>
 #include <dali/graphics/vulkan/vulkan-pipeline-cache.h>
 
 #include <dali/graphics-api/graphics-api-controller.h>
 #include <dali/graphics/vulkan/vulkan-pipeline-cache.h>
 
 #include <dali/graphics-api/graphics-api-controller.h>
@@ -46,8 +46,6 @@
 #define VK_KHR_XCB_SURFACE_EXTENSION_NAME "VK_KHR_xcb_surface"
 #endif
 
 #define VK_KHR_XCB_SURFACE_EXTENSION_NAME "VK_KHR_xcb_surface"
 #endif
 
-#include <iostream>
-
 namespace Dali
 {
 namespace Graphics
 namespace Dali
 {
 namespace Graphics
@@ -96,7 +94,7 @@ Dali::Graphics::API::Controller& Graphics::GetController()
 {
   if(!mGfxController)
   {
 {
   if(!mGfxController)
   {
-    mGfxController = Dali::Graphics::Vulkan::Controller::New(*this);
+    mGfxController = Dali::Graphics::VulkanAPI::Controller::New(*this);
   }
 
   return *mGfxController.get();
   }
 
   return *mGfxController.get();
index b713d84..c39bfd6 100644 (file)
@@ -30,12 +30,11 @@ namespace Dali
 {
 namespace Graphics
 {
 {
 namespace Graphics
 {
+using SurfaceFactory = Dali::Integration::Graphics::SurfaceFactory;
 namespace API
 {
 class Controller;
 }
 namespace API
 {
 class Controller;
 }
-using SurfaceFactory = Dali::Integration::Graphics::SurfaceFactory;
-
 namespace Vulkan
 {
 
 namespace Vulkan
 {
 
@@ -56,7 +55,6 @@ class Surface;
 class CommandPool;
 class DescriptorPool;
 class GpuMemoryManager;
 class CommandPool;
 class DescriptorPool;
 class GpuMemoryManager;
-class Controller;
 class PipelineCache;
 
 struct SwapchainSurfacePair
 class PipelineCache;
 
 struct SwapchainSurfacePair
@@ -191,7 +189,7 @@ private:
   std::vector<FramebufferRef>           mFramebufferCache;
 
 private:
   std::vector<FramebufferRef>           mFramebufferCache;
 
 private:
-  std::unique_ptr<Dali::Graphics::Vulkan::Controller>           mGfxController;
+  std::unique_ptr<Dali::Graphics::API::Controller>           mGfxController;
 
   // TODO: rename
   std::unique_ptr<PipelineCache>        mPipelineDatabase;
 
   // TODO: rename
   std::unique_ptr<PipelineCache>        mPipelineDatabase;
index 6ebb9af..b66b747 100644 (file)
@@ -21,7 +21,6 @@
 // EXTERNAL INCLUDES
 #include <glm/glm.hpp>
 #include <dali/graphics-api/graphics-api-controller.h>
 // EXTERNAL INCLUDES
 #include <glm/glm.hpp>
 #include <dali/graphics-api/graphics-api-controller.h>
-#include <dali/graphics-api/graphics-api-frame.h>
 #include <dali/graphics-api/graphics-api-render-command.h>
 
 // INTERNAL INCLUDES
 #include <dali/graphics-api/graphics-api-render-command.h>
 
 // INTERNAL INCLUDES
 #include <dali/internal/update/rendering/scene-graph-property-buffer.h>
 #include <dali/internal/update/rendering/scene-graph-shader.h>
 
 #include <dali/internal/update/rendering/scene-graph-property-buffer.h>
 #include <dali/internal/update/rendering/scene-graph-shader.h>
 
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-variable"
-#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
-#pragma GCC diagnostic ignored "-Wunused-function"
-
 namespace Dali
 {
 namespace Internal
 namespace Dali
 {
 namespace Internal
@@ -47,69 +41,6 @@ namespace SceneGraph
 {
 namespace
 {
 {
 namespace
 {
-Graphics::API::RenderCommand& BuildRenderCommand(
-  Graphics::API::Controller&           graphics,
-  Graphics::API::Frame&                frame,
-  BufferIndex                          bufferIndex,
-
-  Matrix                               viewProjection,
-  const RenderList&                    renderItemList,
-  Graphics::API::RenderCommand&        command
-)
-{
-  /*
-  // per item/renderer
-  //const auto& renderer = renderItemList.GetRenderer(0);
-  const auto& item = renderItemList.GetItem(0);
-
-  // scenegraph renderer should have complete data
-  const auto sgRenderer = item.mNode->GetRendererAt(0);
-
-
-  const auto& renderer = *item.mRenderer;
-  const auto& dataProviderConst = renderer.GetRenderDataProvider();
-  auto& dataProvider = const_cast<RenderDataProvider&>( dataProviderConst );
-  const auto& uniformMap = dataProvider.GetUniformMap().GetUniformMap( bufferIndex );
-
-  // get resources
-  const auto& shader = sgRenderer->GetShader();
-  const auto& textures = sgRenderer->GetTextures();
-  // todo: samplers
-  //const auto& samplers = sgRenderer->Get;
-
-
-  // prepare vertex buffers
-  const auto& vertexBuffers = sgRenderer->GetGeometry()->GetVertexBuffers();
-  std::vector<Graphics::API::RenderCommand::VertexAttributeBufferBinding> vertexAttributeBindings;
-  auto attribLocation = 0u;
-  auto bindingIndex = 0u;
-
-  for( auto&& vertexBuffer : vertexBuffers )
-  {
-    auto attributeCountInForBuffer = vertexBuffer->GetAttributeCount();
-
-    for( auto i = 0u; i < attributeCountInForBuffer; ++i )
-    {
-      // create binding per attribute
-      auto binding = Graphics::API::RenderCommand::VertexAttributeBufferBinding{}
-        .SetOffset( (vertexBuffer->GetFormat()->components[i]).offset )
-        .SetBinding( bindingIndex )
-        .SetBuffer( vertexBuffer->GetGfxObject() )
-        .SetInputAttributeRate( Graphics::API::RenderCommand::InputAttributeRate::PER_VERTEX )
-        .SetLocation( attribLocation + i )
-        .SetStride( vertexBuffer->GetFormat()->size );
-
-      vertexAttributeBindings.emplace_back( std::move(binding) );
-    }
-  }
-
-  // prepare uniforms
-  auto gfxShader = shader.GetGfxObject();
-
-  // find mapped uniforms
-*/
-  return command;
-}
 
 static constexpr float CLIP_MATRIX_DATA[] = {
   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
 
 static constexpr float CLIP_MATRIX_DATA[] = {
   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
@@ -118,9 +49,7 @@ static const Matrix CLIP_MATRIX(CLIP_MATRIX_DATA);
 
 
 void SubmitRenderItemList( Graphics::API::Controller&           graphics,
 
 
 void SubmitRenderItemList( Graphics::API::Controller&           graphics,
-                           Graphics::API::Frame&                frame,
                            BufferIndex                          bufferIndex,
                            BufferIndex                          bufferIndex,
-                           Graphics::API::RenderCommandBuilder& commandBuilder,
                            Matrix                               viewProjection,
                            RenderInstruction&                   instruction,
                            const RenderList&                    renderItemList )
                            Matrix                               viewProjection,
                            RenderInstruction&                   instruction,
                            const RenderList&                    renderItemList )
@@ -139,12 +68,27 @@ void SubmitRenderItemList( Graphics::API::Controller&           graphics,
   Matrix::Multiply( vulkanProjectionMatrix, *projectionMatrix, CLIP_MATRIX );
 
   std::vector<Graphics::API::RenderCommand*> commandList;
   Matrix::Multiply( vulkanProjectionMatrix, *projectionMatrix, CLIP_MATRIX );
 
   std::vector<Graphics::API::RenderCommand*> commandList;
+
+  // @todo: this should be probably separated ???
+  auto renderTargetBinding = Graphics::API::RenderCommand::RenderTargetBinding{}
+  .SetClearColors( {
+                     { instruction.mClearColor.r,
+                       instruction.mClearColor.g,
+                       instruction.mClearColor.b,
+                       instruction.mClearColor.a
+                     }});
+
+
   for( auto i = 0u; i < numberOfRenderItems; ++i )
   {
     auto& item = renderItemList.GetItem( i );
     auto sgRenderer = item.mNode->GetRendererAt(0);
     auto& cmd = sgRenderer->GetGfxRenderCommand();
   for( auto i = 0u; i < numberOfRenderItems; ++i )
   {
     auto& item = renderItemList.GetItem( i );
     auto sgRenderer = item.mNode->GetRendererAt(0);
     auto& cmd = sgRenderer->GetGfxRenderCommand();
-
+    if(cmd.GetVertexBufferBindings().empty())
+    {
+      continue;
+    }
+    cmd.BindRenderTarget( renderTargetBinding );
     Matrix mvp;
     Matrix::Multiply( mvp, item.mModelMatrix, viewProjection );
     sgRenderer->WriteUniform( "uModelMatrix", item.mModelMatrix );
     Matrix mvp;
     Matrix::Multiply( mvp, item.mModelMatrix, viewProjection );
     sgRenderer->WriteUniform( "uModelMatrix", item.mModelMatrix );
@@ -161,33 +105,22 @@ void SubmitRenderItemList( Graphics::API::Controller&           graphics,
 }
 
 void SubmitInstruction( Graphics::API::Controller& graphics,
 }
 
 void SubmitInstruction( Graphics::API::Controller& graphics,
-                        Graphics::API::Frame&      frame,
                         BufferIndex                bufferIndex,
                         RenderInstruction&         instruction )
 {
   using namespace Graphics::API;
 
   // Create constant buffer with static uniforms: view matrix, projection matrix
                         BufferIndex                bufferIndex,
                         RenderInstruction&         instruction )
 {
   using namespace Graphics::API;
 
   // Create constant buffer with static uniforms: view matrix, projection matrix
-
-  // TODO: @todo: buffer for constant uniforms
-  /*
-  auto contantUniforms = BuildBuffer<ProjectionMatrix, ViewMatrix>();
-  constantUniforms["uProjection"] = projectionMatrix;
-  constantUniforms["uViewMatrix"] = viewMatrix;
-  */
-
   const Matrix* viewMatrix       = instruction.GetViewMatrix( bufferIndex );
   const Matrix* projectionMatrix = instruction.GetProjectionMatrix( bufferIndex );
   Matrix        viewProjection;
   Matrix::Multiply( viewProjection, *viewMatrix, *projectionMatrix );
 
   const Matrix* viewMatrix       = instruction.GetViewMatrix( bufferIndex );
   const Matrix* projectionMatrix = instruction.GetProjectionMatrix( bufferIndex );
   Matrix        viewProjection;
   Matrix::Multiply( viewProjection, *viewMatrix, *projectionMatrix );
 
-  auto commandBuilder = RenderCommandBuilder{};
-
   auto numberOfRenderLists = instruction.RenderListCount();
   for( auto i = 0u; i < numberOfRenderLists; ++i )
   {
     SubmitRenderItemList(
   auto numberOfRenderLists = instruction.RenderListCount();
   for( auto i = 0u; i < numberOfRenderLists; ++i )
   {
     SubmitRenderItemList(
-      graphics, frame, bufferIndex, commandBuilder, viewProjection, instruction, *instruction.GetRenderList( i ) );
+      graphics, bufferIndex, viewProjection, instruction, *instruction.GetRenderList( i ) );
   }
 }
 } // namespace
   }
 }
 } // namespace
@@ -196,7 +129,6 @@ void SubmitRenderInstructions( Graphics::API::Controller&  graphics,
                                RenderInstructionContainer& renderInstructions,
                                BufferIndex                 bufferIndex )
 {
                                RenderInstructionContainer& renderInstructions,
                                BufferIndex                 bufferIndex )
 {
-  auto frame = Graphics::API::Frame{};
   graphics.BeginFrame();
 
 
   graphics.BeginFrame();
 
 
@@ -205,7 +137,7 @@ void SubmitRenderInstructions( Graphics::API::Controller&  graphics,
   {
     RenderInstruction& instruction = renderInstructions.At( bufferIndex, i );
 
   {
     RenderInstruction& instruction = renderInstructions.At( bufferIndex, i );
 
-    SubmitInstruction( graphics, frame, bufferIndex, instruction );
+    SubmitInstruction( graphics, bufferIndex, instruction );
   }
 
   graphics.EndFrame( );
   }
 
   graphics.EndFrame( );
@@ -215,4 +147,3 @@ void SubmitRenderInstructions( Graphics::API::Controller&  graphics,
 } // namespace Internal
 } // namespace Dali
 
 } // namespace Internal
 } // namespace Dali
 
-#pragma GCC diagnostic pop
index 9561be7..900cc98 100644 (file)
@@ -24,7 +24,7 @@
 #include <dali/internal/update/manager/update-manager.h>
 
 // EXTERNAL INCLUDES
 #include <dali/internal/update/manager/update-manager.h>
 
 // EXTERNAL INCLUDES
-#include <dali/graphics/graphics-controller.h>
+#include <dali/graphics-api/graphics-api-controller.h>
 
 // INTERNAL INCLUDES
 #include <dali/public-api/common/stage.h>
 
 // INTERNAL INCLUDES
 #include <dali/public-api/common/stage.h>
index abf4281..39c2841 100644 (file)
@@ -287,6 +287,10 @@ void Renderer::PrepareRender( BufferIndex updateBufferIndex )
     }
   }
 
     }
   }
 
+  // Invalid input attributes!
+  if( mShader->GetGfxObject().Get().GetVertexAttributeLocations().size() != vertexAttributeBindings.size())
+    return;
+
   UpdateUniformMap( updateBufferIndex );
 
   auto& shader = mShader->GetGfxObject().Get();
   UpdateUniformMap( updateBufferIndex );
 
   auto& shader = mShader->GetGfxObject().Get();
@@ -389,16 +393,23 @@ void Renderer::PrepareRender( BufferIndex updateBufferIndex )
   auto textureBindings = Graphics::API::RenderCommand::NewTextureBindings();
   auto samplers = shader.GetSamplers();
 
   auto textureBindings = Graphics::API::RenderCommand::NewTextureBindings();
   auto samplers = shader.GetSamplers();
 
-  for( auto i = 0u; i < mTextureSet->GetTextureCount(); ++i )
+  if( mTextureSet )
   {
   {
-    auto texture = mTextureSet->GetTexture( i );
-    auto gfxTexture = texture->GetGfxObject();
-    auto binding = Graphics::API::RenderCommand::TextureBinding{}
-        .SetBinding( samplers[i].binding )
-        .SetTexture( texture->GetGfxObject() )
-        .SetSampler( nullptr );
-
-    textureBindings.emplace_back( binding );
+    if(!samplers.empty())
+    {
+      for (auto i = 0u; i < mTextureSet->GetTextureCount(); ++i)
+      {
+
+        auto texture    = mTextureSet->GetTexture(i);
+        auto gfxTexture = texture->GetGfxObject();
+        auto binding    = Graphics::API::RenderCommand::TextureBinding{}
+          .SetBinding(samplers[i].binding)
+          .SetTexture(texture->GetGfxObject())
+          .SetSampler(nullptr);
+
+        textureBindings.emplace_back(binding);
+      }
+    }
   }
 
   // Build render command
   }
 
   // Build render command
@@ -407,11 +418,15 @@ void Renderer::PrepareRender( BufferIndex updateBufferIndex )
 
   const auto& vb = mGeometry->GetVertexBuffers()[0];
   //vb->Update()
 
   const auto& vb = mGeometry->GetVertexBuffers()[0];
   //vb->Update()
+
+
+
   mGfxRenderCommand->PushConstants( std::move(pushConstantsBindings) );
   mGfxRenderCommand->BindVertexBuffers( std::move(vertexAttributeBindings) );
   mGfxRenderCommand->BindTextures( std::move(textureBindings) );
   mGfxRenderCommand->PushConstants( std::move(pushConstantsBindings) );
   mGfxRenderCommand->BindVertexBuffers( std::move(vertexAttributeBindings) );
   mGfxRenderCommand->BindTextures( std::move(textureBindings) );
-  mGfxRenderCommand->BindRenderState( std::move( Graphics::API::RenderCommand::RenderState{}
-                                       .SetShader( mShader->GetGfxObject() ) ) );
+  mGfxRenderCommand->BindRenderState( Graphics::API::RenderCommand::RenderState{}
+                                        .SetShader( mShader->GetGfxObject() )
+                                        .SetBlendState( { mBlendMode != BlendMode::OFF }) );
   mGfxRenderCommand->Draw( std::move(Graphics::API::RenderCommand::DrawCommand{}
                    .SetFirstVertex(0u)
                    .SetDrawType( Graphics::API::RenderCommand::DrawType::VERTEX_DRAW )
   mGfxRenderCommand->Draw( std::move(Graphics::API::RenderCommand::DrawCommand{}
                    .SetFirstVertex(0u)
                    .SetDrawType( Graphics::API::RenderCommand::DrawType::VERTEX_DRAW )