OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 // Include here to ensure SK_SUPPORT_GPU is set correctly before it is examined. | 8 // Include here to ensure SK_SUPPORT_GPU is set correctly before it is examined. |
9 #include "SkTypes.h" | 9 #include "SkTypes.h" |
10 | 10 |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
72 GrSurfaceDesc smallDesc; | 72 GrSurfaceDesc smallDesc; |
73 smallDesc.fFlags = kRenderTarget_GrSurfaceFlag; | 73 smallDesc.fFlags = kRenderTarget_GrSurfaceFlag; |
74 smallDesc.fConfig = kSkia8888_GrPixelConfig; | 74 smallDesc.fConfig = kSkia8888_GrPixelConfig; |
75 smallDesc.fWidth = 4; | 75 smallDesc.fWidth = 4; |
76 smallDesc.fHeight = 4; | 76 smallDesc.fHeight = 4; |
77 smallDesc.fSampleCnt = 0; | 77 smallDesc.fSampleCnt = 0; |
78 | 78 |
79 // Test that two budgeted RTs with the same desc share a stencil buffer. | 79 // Test that two budgeted RTs with the same desc share a stencil buffer. |
80 SkAutoTUnref<GrTexture> smallRT0(context->createTexture(smallDesc, true)); | 80 SkAutoTUnref<GrTexture> smallRT0(context->createTexture(smallDesc, true)); |
81 if (smallRT0 && smallRT0->asRenderTarget()) { | 81 if (smallRT0 && smallRT0->asRenderTarget()) { |
82 smallRT0->asRenderTarget()->renderTargetPriv().attachStencilBuffer(); | 82 smallRT0->asRenderTarget()->renderTargetPriv().attachStencilAttachment()
; |
83 } | 83 } |
84 | 84 |
85 SkAutoTUnref<GrTexture> smallRT1(context->createTexture(smallDesc, true)); | 85 SkAutoTUnref<GrTexture> smallRT1(context->createTexture(smallDesc, true)); |
86 if (smallRT1 && smallRT1->asRenderTarget()) { | 86 if (smallRT1 && smallRT1->asRenderTarget()) { |
87 smallRT1->asRenderTarget()->renderTargetPriv().attachStencilBuffer(); | 87 smallRT1->asRenderTarget()->renderTargetPriv().attachStencilAttachment()
; |
88 } | 88 } |
89 | 89 |
90 REPORTER_ASSERT(reporter, smallRT0 && smallRT1 && | 90 REPORTER_ASSERT(reporter, |
91 smallRT0->asRenderTarget() && smallRT1->asRenderTa
rget() && | 91 smallRT0 && smallRT1 && |
92 smallRT0->asRenderTarget()->renderTargetPriv().get
StencilBuffer() == | 92 smallRT0->asRenderTarget() && smallRT1->asRenderTarget() && |
93 smallRT1->asRenderTarget()->renderTargetPriv().get
StencilBuffer()); | 93 smallRT0->asRenderTarget()->renderTargetPriv().getStencilAtt
achment() == |
| 94 smallRT1->asRenderTarget()->renderTargetPriv().getStencilAtt
achment()); |
94 | 95 |
95 // An unbudgeted RT with the same desc should also share. | 96 // An unbudgeted RT with the same desc should also share. |
96 SkAutoTUnref<GrTexture> smallRT2(context->createTexture(smallDesc, false)); | 97 SkAutoTUnref<GrTexture> smallRT2(context->createTexture(smallDesc, false)); |
97 if (smallRT2 && smallRT2->asRenderTarget()) { | 98 if (smallRT2 && smallRT2->asRenderTarget()) { |
98 smallRT2->asRenderTarget()->renderTargetPriv().attachStencilBuffer(); | 99 smallRT2->asRenderTarget()->renderTargetPriv().attachStencilAttachment()
; |
99 } | 100 } |
100 REPORTER_ASSERT(reporter, smallRT0 && smallRT2 && | 101 REPORTER_ASSERT(reporter, |
101 smallRT0->asRenderTarget() && smallRT2->asRenderTa
rget() && | 102 smallRT0 && smallRT2 && |
102 smallRT0->asRenderTarget()->renderTargetPriv().get
StencilBuffer() == | 103 smallRT0->asRenderTarget() && smallRT2->asRenderTarget() && |
103 smallRT2->asRenderTarget()->renderTargetPriv().get
StencilBuffer()); | 104 smallRT0->asRenderTarget()->renderTargetPriv().getStencilAtt
achment() == |
| 105 smallRT2->asRenderTarget()->renderTargetPriv().getStencilAtt
achment()); |
104 | 106 |
105 // An RT with a much larger size should not share. | 107 // An RT with a much larger size should not share. |
106 GrSurfaceDesc bigDesc; | 108 GrSurfaceDesc bigDesc; |
107 bigDesc.fFlags = kRenderTarget_GrSurfaceFlag; | 109 bigDesc.fFlags = kRenderTarget_GrSurfaceFlag; |
108 bigDesc.fConfig = kSkia8888_GrPixelConfig; | 110 bigDesc.fConfig = kSkia8888_GrPixelConfig; |
109 bigDesc.fWidth = 400; | 111 bigDesc.fWidth = 400; |
110 bigDesc.fHeight = 200; | 112 bigDesc.fHeight = 200; |
111 bigDesc.fSampleCnt = 0; | 113 bigDesc.fSampleCnt = 0; |
112 SkAutoTUnref<GrTexture> bigRT(context->createTexture(bigDesc, false)); | 114 SkAutoTUnref<GrTexture> bigRT(context->createTexture(bigDesc, false)); |
113 if (bigRT && bigRT->asRenderTarget()) { | 115 if (bigRT && bigRT->asRenderTarget()) { |
114 bigRT->asRenderTarget()->renderTargetPriv().attachStencilBuffer(); | 116 bigRT->asRenderTarget()->renderTargetPriv().attachStencilAttachment(); |
115 } | 117 } |
116 REPORTER_ASSERT(reporter, smallRT0 && bigRT && | 118 REPORTER_ASSERT(reporter, |
117 smallRT0->asRenderTarget() && bigRT->asRenderTarge
t() && | 119 smallRT0 && bigRT && |
118 smallRT0->asRenderTarget()->renderTargetPriv().get
StencilBuffer() != | 120 smallRT0->asRenderTarget() && bigRT->asRenderTarget() && |
119 bigRT->asRenderTarget()->renderTargetPriv().getSte
ncilBuffer()); | 121 smallRT0->asRenderTarget()->renderTargetPriv().getStencilAtt
achment() != |
| 122 bigRT->asRenderTarget()->renderTargetPriv().getStencilAttach
ment()); |
120 | 123 |
121 if (context->getMaxSampleCount() >= 4) { | 124 if (context->getMaxSampleCount() >= 4) { |
122 // An RT with a different sample count should not share. | 125 // An RT with a different sample count should not share. |
123 GrSurfaceDesc smallMSAADesc = smallDesc; | 126 GrSurfaceDesc smallMSAADesc = smallDesc; |
124 smallMSAADesc.fSampleCnt = 4; | 127 smallMSAADesc.fSampleCnt = 4; |
125 SkAutoTUnref<GrTexture> smallMSAART0(context->createTexture(smallMSAADes
c, false)); | 128 SkAutoTUnref<GrTexture> smallMSAART0(context->createTexture(smallMSAADes
c, false)); |
126 if (smallMSAART0 && smallMSAART0->asRenderTarget()) { | 129 if (smallMSAART0 && smallMSAART0->asRenderTarget()) { |
127 smallMSAART0->asRenderTarget()->renderTargetPriv().attachStencilBuff
er(); | 130 smallMSAART0->asRenderTarget()->renderTargetPriv().attachStencilAtta
chment(); |
128 } | 131 } |
129 #ifdef SK_BUILD_FOR_ANDROID | 132 #ifdef SK_BUILD_FOR_ANDROID |
130 if (!smallMSAART0) { | 133 if (!smallMSAART0) { |
131 // The nexus player seems to fail to create MSAA textures. | 134 // The nexus player seems to fail to create MSAA textures. |
132 return; | 135 return; |
133 } | 136 } |
134 #endif | 137 #endif |
135 REPORTER_ASSERT(reporter, | 138 REPORTER_ASSERT(reporter, |
136 smallRT0 && smallMSAART0 && | 139 smallRT0 && smallMSAART0 && |
137 smallRT0->asRenderTarget() && smallMSAART0->asRenderTarg
et() && | 140 smallRT0->asRenderTarget() && smallMSAART0->asRenderTarg
et() && |
138 smallRT0->asRenderTarget()->renderTargetPriv().getStenci
lBuffer() != | 141 smallRT0->asRenderTarget()->renderTargetPriv().getStenci
lAttachment() != |
139 smallMSAART0->asRenderTarget()->renderTargetPriv().getSt
encilBuffer()); | 142 smallMSAART0->asRenderTarget()->renderTargetPriv().getSt
encilAttachment()); |
140 // A second MSAA RT should share with the first MSAA RT. | 143 // A second MSAA RT should share with the first MSAA RT. |
141 SkAutoTUnref<GrTexture> smallMSAART1(context->createTexture(smallMSAADes
c, false)); | 144 SkAutoTUnref<GrTexture> smallMSAART1(context->createTexture(smallMSAADes
c, false)); |
142 if (smallMSAART1 && smallMSAART1->asRenderTarget()) { | 145 if (smallMSAART1 && smallMSAART1->asRenderTarget()) { |
143 smallMSAART1->asRenderTarget()->renderTargetPriv().attachStencilBuff
er(); | 146 smallMSAART1->asRenderTarget()->renderTargetPriv().attachStencilAtta
chment(); |
144 } | 147 } |
145 REPORTER_ASSERT(reporter, | 148 REPORTER_ASSERT(reporter, |
146 smallMSAART0 && smallMSAART1 && | 149 smallMSAART0 && smallMSAART1 && |
147 smallMSAART0->asRenderTarget() && | 150 smallMSAART0->asRenderTarget() && |
148 smallMSAART1->asRenderTarget() && | 151 smallMSAART1->asRenderTarget() && |
149 smallMSAART0->asRenderTarget()->renderTargetPriv().getSt
encilBuffer() == | 152 smallMSAART0->asRenderTarget()->renderTargetPriv().getSt
encilAttachment() == |
150 smallMSAART1->asRenderTarget()->renderTargetPriv().getSt
encilBuffer()); | 153 smallMSAART1->asRenderTarget()->renderTargetPriv().getSt
encilAttachment()); |
151 // But not one with a larger sample count should not. (Also check that t
he request for 4 | 154 // But not one with a larger sample count should not. (Also check that t
he request for 4 |
152 // samples didn't get rounded up to >= 8 or else they could share.). | 155 // samples didn't get rounded up to >= 8 or else they could share.). |
153 if (context->getMaxSampleCount() >= 8 && smallMSAART0 && smallMSAART0->a
sRenderTarget() && | 156 if (context->getMaxSampleCount() >= 8 && smallMSAART0 && smallMSAART0->a
sRenderTarget() && |
154 smallMSAART0->asRenderTarget()->numSamples() < 8) { | 157 smallMSAART0->asRenderTarget()->numSamples() < 8) { |
155 smallMSAADesc.fSampleCnt = 8; | 158 smallMSAADesc.fSampleCnt = 8; |
156 smallMSAART1.reset(context->createTexture(smallMSAADesc, false)); | 159 smallMSAART1.reset(context->createTexture(smallMSAADesc, false)); |
157 SkAutoTUnref<GrTexture> smallMSAART1(context->createTexture(smallMSA
ADesc, false)); | 160 SkAutoTUnref<GrTexture> smallMSAART1(context->createTexture(smallMSA
ADesc, false)); |
158 if (smallMSAART1 && smallMSAART1->asRenderTarget()) { | 161 if (smallMSAART1 && smallMSAART1->asRenderTarget()) { |
159 smallMSAART1->asRenderTarget()->renderTargetPriv().attachStencil
Buffer(); | 162 smallMSAART1->asRenderTarget()->renderTargetPriv().attachStencil
Attachment(); |
160 } | 163 } |
161 REPORTER_ASSERT(reporter, | 164 REPORTER_ASSERT(reporter, |
162 smallMSAART0 && smallMSAART1 && | 165 smallMSAART0 && smallMSAART1 && |
163 smallMSAART0->asRenderTarget() && | 166 smallMSAART0->asRenderTarget() && |
164 smallMSAART1->asRenderTarget() && | 167 smallMSAART1->asRenderTarget() && |
165 smallMSAART0->asRenderTarget()->renderTargetPriv().g
etStencilBuffer() != | 168 smallMSAART0->asRenderTarget()->renderTargetPriv().getSt
encilAttachment() != |
166 smallMSAART1->asRenderTarget()->renderTargetPriv().g
etStencilBuffer()); | 169 smallMSAART1->asRenderTarget()->renderTargetPriv().getSt
encilAttachment()); |
167 } | 170 } |
168 } | 171 } |
169 } | 172 } |
170 | 173 |
171 class TestResource : public GrGpuResource { | 174 class TestResource : public GrGpuResource { |
172 static const size_t kDefaultSize = 100; | 175 static const size_t kDefaultSize = 100; |
173 enum ScratchConstructor { kScratchConstructor }; | 176 enum ScratchConstructor { kScratchConstructor }; |
174 public: | 177 public: |
175 SK_DECLARE_INST_COUNT(TestResource); | 178 SK_DECLARE_INST_COUNT(TestResource); |
176 /** Property that distinctly categorizes the resource. | 179 /** Property that distinctly categorizes the resource. |
(...skipping 1024 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1201 test_scratch_key_consistency(reporter); | 1204 test_scratch_key_consistency(reporter); |
1202 test_purge_invalidated(reporter); | 1205 test_purge_invalidated(reporter); |
1203 test_cache_chained_purge(reporter); | 1206 test_cache_chained_purge(reporter); |
1204 test_resource_size_changed(reporter); | 1207 test_resource_size_changed(reporter); |
1205 test_timestamp_wrap(reporter); | 1208 test_timestamp_wrap(reporter); |
1206 test_flush(reporter); | 1209 test_flush(reporter); |
1207 test_large_resource_count(reporter); | 1210 test_large_resource_count(reporter); |
1208 } | 1211 } |
1209 | 1212 |
1210 #endif | 1213 #endif |
OLD | NEW |