blob: e10b45a2cc137768aae861231d67cd72f4af3c6f [file] [log] [blame]
bsalomonc8dc1f72014-08-21 13:02:13 -07001
2/*
3 * Copyright 2014 Google Inc.
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
8
9#ifndef GrResourceCache2_DEFINED
10#define GrResourceCache2_DEFINED
11
bsalomon744998e2014-08-28 09:54:34 -070012#include "GrGpuResource.h"
13#include "GrResourceKey.h"
bsalomonc8dc1f72014-08-21 13:02:13 -070014#include "SkTInternalLList.h"
bsalomon744998e2014-08-28 09:54:34 -070015#include "SkTMultiMap.h"
bsalomonc8dc1f72014-08-21 13:02:13 -070016
17/**
18 * Eventual replacement for GrResourceCache. Currently it simply holds a list
19 * of all GrGpuResource objects for a GrContext. It is used to invalidate all
20 * the resources when necessary.
21 */
22class GrResourceCache2 {
23public:
24 GrResourceCache2() : fCount(0) {};
25 ~GrResourceCache2();
26
bsalomonbcf0a522014-10-08 08:40:09 -070027 void insertResource(GrGpuResource*);
bsalomonc8dc1f72014-08-21 13:02:13 -070028
bsalomonbcf0a522014-10-08 08:40:09 -070029 void removeResource(GrGpuResource*);
bsalomonc8dc1f72014-08-21 13:02:13 -070030
31 void abandonAll();
32
33 void releaseAll();
34
bsalomon000f8292014-10-15 19:04:14 -070035 enum {
36 /** Preferentially returns scratch resources with no pending IO. */
37 kPreferNoPendingIO_ScratchFlag = 0x1,
38 /** Will not return any resources that match but have pending IO. */
39 kRequireNoPendingIO_ScratchFlag = 0x2,
40 };
41 GrGpuResource* findAndRefScratchResource(const GrResourceKey& scratchKey, uint32_t flags = 0);
bsalomonbcf0a522014-10-08 08:40:09 -070042
bsalomonc8dc1f72014-08-21 13:02:13 -070043private:
bsalomon16961262014-08-26 14:01:07 -070044#ifdef SK_DEBUG
45 bool isInCache(const GrGpuResource* r) const {
46 return fResources.isInList(r);
47 }
48#endif
49
bsalomonbcf0a522014-10-08 08:40:09 -070050 class AvailableForScratchUse;
bsalomon744998e2014-08-28 09:54:34 -070051
bsalomon744998e2014-08-28 09:54:34 -070052 struct ScratchMapTraits {
53 static const GrResourceKey& GetKey(const GrGpuResource& r) {
54 return r.getScratchKey();
55 }
56
57 static uint32_t Hash(const GrResourceKey& key) { return key.getHash(); }
58 };
59 typedef SkTMultiMap<GrGpuResource, GrResourceKey, ScratchMapTraits> ScratchMap;
60
61 int fCount;
62 SkTInternalLList<GrGpuResource> fResources;
63 // This map holds all resources that can be used as scratch resources.
64 ScratchMap fScratchMap;
bsalomonc8dc1f72014-08-21 13:02:13 -070065};
66
67#endif