From 82cceb2de7958c7706768f21052a2e3409511fb8 Mon Sep 17 00:00:00 2001 From: Jamie Madill Date: Tue, 9 Sep 2014 13:21:33 -0400 Subject: Only use direct buffers for static data in D3D11. For highly dynamic data, which gets updated every frame, or almost every frame, we're better off using our existing dynamic buffer path. We could further optimize the dynamic buffer path by only uploading changed data every frame. BUG=angle:705 Change-Id: Icbb357b889be789b30f73067f75b13664c806929 Reviewed-on: https://chromium-review.googlesource.com/217280 Tested-by: Jamie Madill Reviewed-by: Shannon Woods --- src/libGLESv2/renderer/d3d/d3d11/Buffer11.cpp | 8 ++++++++ src/libGLESv2/renderer/d3d/d3d11/Buffer11.h | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) (limited to 'src/libGLESv2/renderer/d3d') diff --git a/src/libGLESv2/renderer/d3d/d3d11/Buffer11.cpp b/src/libGLESv2/renderer/d3d/d3d11/Buffer11.cpp index ea6660e2..c612ddd0 100644 --- a/src/libGLESv2/renderer/d3d/d3d11/Buffer11.cpp +++ b/src/libGLESv2/renderer/d3d/d3d11/Buffer11.cpp @@ -597,6 +597,14 @@ Buffer11::PackStorage11 *Buffer11::getPackStorage() return static_cast(packStorage); } +bool Buffer11::supportsDirectBinding() const +{ + // Do not support direct buffers for dynamic data. The streaming buffer + // offers better performance for data which changes every frame. + // Check for absence of static buffer interfaces to detect dynamic data. + return (mStaticVertexBuffer && mStaticIndexBuffer); +} + Buffer11::BufferStorage11::BufferStorage11(Renderer11 *renderer, BufferUsage usage) : mRenderer(renderer), mUsage(usage), diff --git a/src/libGLESv2/renderer/d3d/d3d11/Buffer11.h b/src/libGLESv2/renderer/d3d/d3d11/Buffer11.h index 5740566c..5f24fb4e 100644 --- a/src/libGLESv2/renderer/d3d/d3d11/Buffer11.h +++ b/src/libGLESv2/renderer/d3d/d3d11/Buffer11.h @@ -59,7 +59,7 @@ class Buffer11 : public BufferD3D // BufferD3D implementation virtual size_t getSize() const { return mSize; } - virtual bool supportsDirectBinding() const { return true; } + virtual bool supportsDirectBinding() const; virtual Renderer* getRenderer(); // BufferImpl implementation -- cgit v1.2.3