blob: ea7b4fa157a63324a36e0ff4c71eaba0b3f3a2cd [file] [log] [blame]
bsalomon@google.com558a75b2011-08-08 17:01:14 +00001
2/*
3 * Copyright 2011 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#include "GrStencilBuffer.h"
10
11#include "GrContext.h"
12#include "GrGpu.h"
robertphillips@google.com46a86002012-08-08 10:42:44 +000013#include "GrResourceCache.h"
14
robertphillips@google.com9fbcad02012-09-09 14:44:15 +000015void GrStencilBuffer::transferToCache() {
tfarina@chromium.orgf6de4752013-08-17 00:02:59 +000016 SkASSERT(NULL == this->getCacheEntry());
robertphillips@google.com1f47f4f2012-08-16 14:49:16 +000017
robertphillips@google.com9fbcad02012-09-09 14:44:15 +000018 this->getGpu()->getContext()->addStencilBuffer(this);
bsalomon@google.comeefe6f12011-08-09 17:57:12 +000019}
robertphillips@google.com46a86002012-08-08 10:42:44 +000020
21namespace {
bsalomon@google.com0797c2c2012-12-20 15:13:01 +000022// we should never have more than one stencil buffer with same combo of (width,height,samplecount)
23void gen_cache_id(int width, int height, int sampleCnt, GrCacheID* cacheID) {
24 static const GrCacheID::Domain gStencilBufferDomain = GrCacheID::GenerateDomain();
25 GrCacheID::Key key;
26 uint32_t* keyData = key.fData32;
27 keyData[0] = width;
28 keyData[1] = height;
29 keyData[2] = sampleCnt;
bsalomon@google.com10a9fb82013-01-02 19:29:57 +000030 memset(keyData + 3, 0, sizeof(key) - 3 * sizeof(uint32_t));
bsalomon@google.com0797c2c2012-12-20 15:13:01 +000031 GR_STATIC_ASSERT(sizeof(key) >= 3 * sizeof(uint32_t));
32 cacheID->reset(gStencilBufferDomain, key);
robertphillips@google.com46a86002012-08-08 10:42:44 +000033}
34}
35
rmistry@google.comd6176b02012-08-23 18:14:13 +000036GrResourceKey GrStencilBuffer::ComputeKey(int width,
37 int height,
robertphillips@google.com46a86002012-08-08 10:42:44 +000038 int sampleCnt) {
bsalomon@google.com0797c2c2012-12-20 15:13:01 +000039 // All SBs are created internally to attach to RTs so they all use the same domain.
40 static const GrResourceKey::ResourceType gStencilBufferResourceType =
41 GrResourceKey::GenerateResourceType();
42 GrCacheID id;
43 gen_cache_id(width, height, sampleCnt, &id);
robertphillips@google.com46a86002012-08-08 10:42:44 +000044
bsalomon@google.com0797c2c2012-12-20 15:13:01 +000045 // we don't use any flags for SBs currently.
46 return GrResourceKey(id, gStencilBufferResourceType, 0);
robertphillips@google.com46a86002012-08-08 10:42:44 +000047}