1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/*
2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2017 Google Inc.
3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *
4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be
5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file.
6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */
7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#ifndef GrTextureProxyPriv_DEFINED
9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define GrTextureProxyPriv_DEFINED
10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "GrTextureProxy.h"
12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass GrDeferredProxyUploader;
14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass GrOpFlushState;
15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/**
17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * This class hides the more specialized capabilities of GrTextureProxy.
18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */
19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass GrTextureProxyPriv {
20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic:
21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    // Attach a deferred uploader to the proxy. Holds data being prepared by a worker thread.
22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setDeferredUploader(std::unique_ptr<GrDeferredProxyUploader>);
23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bool isDeferred() const { return SkToBool(fTextureProxy->fDeferredUploader.get()); }
24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    // For a deferred proxy (one that has a deferred uploader attached), this schedules an ASAP
25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    // upload of that data to the instantiated texture.
26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void scheduleUpload(GrOpFlushState*);
27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    // Clears any deferred uploader object on the proxy. Used to free the CPU data after the
28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    // contents have been uploaded.
29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void resetDeferredUploader();
30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate:
32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    explicit GrTextureProxyPriv(GrTextureProxy* textureProxy) : fTextureProxy(textureProxy) {}
33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    GrTextureProxyPriv(const GrTextureProxyPriv&) {} // unimpl
34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    GrTextureProxyPriv& operator=(const GrTextureProxyPriv&); // unimpl
35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    // No taking addresses of this type.
37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    const GrTextureProxyPriv* operator&() const;
38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    GrTextureProxyPriv* operator&();
39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    GrTextureProxy* fTextureProxy;
41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    friend class GrTextureProxy;  // to construct/copy this type.
43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot};
44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotinline GrTextureProxyPriv GrTextureProxy::texPriv() { return GrTextureProxyPriv(this); }
46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotinline const GrTextureProxyPriv GrTextureProxy::texPriv() const {
48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    return GrTextureProxyPriv(const_cast<GrTextureProxy*>(this));
49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}
50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif
52