Skip to content

Commit 8137f3c

Browse files
lhkbobSkia Commit-Bot
authored andcommitted
Revert "Add clamp to border wrap mode to gpu"
This reverts commit f49a578. Reason for revert: clamp-to-border in metal not available on iOS Original change's description: > Add clamp to border wrap mode to gpu > > Bug: skia: > Change-Id: I286163cdea4fa8f7e6a876baaa11aa3dacd4f2ff > Reviewed-on: https://skia-review.googlesource.com/c/175244 > Reviewed-by: Brian Salomon <bsalomon@google.com> > Reviewed-by: Greg Daniel <egdaniel@google.com> > Commit-Queue: Michael Ludwig <michaelludwig@google.com> TBR=egdaniel@google.com,bsalomon@google.com,ethannicholas@google.com,michaelludwig@google.com Change-Id: I01ef28d9c2fbf6c6dcd82d9aac193ff102d60151 No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: skia: Reviewed-on: https://skia-review.googlesource.com/c/175988 Reviewed-by: Michael Ludwig <michaelludwig@google.com> Commit-Queue: Michael Ludwig <michaelludwig@google.com>
1 parent 0a77f43 commit 8137f3c

File tree

10 files changed

+13
-77
lines changed

10 files changed

+13
-77
lines changed

include/gpu/GrSamplerState.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
class GrSamplerState {
1717
public:
1818
enum class Filter : uint8_t { kNearest, kBilerp, kMipMap };
19-
enum class WrapMode : uint8_t { kClamp, kRepeat, kMirrorRepeat, kClampToBorder };
19+
enum class WrapMode : uint8_t { kClamp, kRepeat, kMirrorRepeat };
2020

2121
static constexpr GrSamplerState ClampNearest() { return GrSamplerState(); }
2222
static constexpr GrSamplerState ClampBilerp() {
@@ -51,8 +51,7 @@ class GrSamplerState {
5151
WrapMode wrapModeY() const { return fWrapModes[1]; }
5252

5353
bool isRepeated() const {
54-
return (WrapMode::kClamp != fWrapModes[0] && WrapMode::kClampToBorder != fWrapModes[0]) ||
55-
(WrapMode::kClamp != fWrapModes[1] && WrapMode::kClampToBorder != fWrapModes[1]);
54+
return WrapMode::kClamp != fWrapModes[0] || WrapMode::kClamp != fWrapModes[1];
5655
}
5756

5857
bool operator==(const GrSamplerState& that) const {

src/gpu/GrCaps.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,6 @@ GrCaps::GrCaps(const GrContextOptions& options) {
7272

7373
fPreferVRAMUseOverFlushes = true;
7474

75-
// Default to true, allow older versions of OpenGL to disable explicitly
76-
fClampToBorderSupport = true;
77-
7875
fDriverBugWorkarounds = options.fDriverBugWorkarounds;
7976
}
8077

src/gpu/GrCaps.h

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -311,12 +311,6 @@ class GrCaps : public SkRefCnt {
311311
*/
312312
GrBackendFormat createFormatFromBackendTexture(const GrBackendTexture&) const;
313313

314-
/**
315-
* The CLAMP_TO_BORDER wrap mode for texture coordinates was added to desktop GL in 1.3, and
316-
* GLES 3.2, but is also available in extensions. Vulkan and Metal always have support.
317-
*/
318-
bool clampToBorderSupport() const { return fClampToBorderSupport; }
319-
320314
const GrDriverBugWorkarounds& workarounds() const { return fDriverBugWorkarounds; }
321315

322316
protected:
@@ -353,7 +347,6 @@ class GrCaps : public SkRefCnt {
353347
bool fMustClearUploadedBufferData : 1;
354348
bool fSupportsAHardwareBufferImages : 1;
355349
bool fHalfFloatVertexAttributeSupport : 1;
356-
bool fClampToBorderSupport : 1;
357350

358351
// Driver workaround
359352
bool fBlacklistCoverageCounting : 1;

src/gpu/gl/GrGLCaps.cpp

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -235,21 +235,6 @@ void GrGLCaps::init(const GrContextOptions& contextOptions,
235235
// lacks TexImage2D support and ANGLE lacks GL ES 3.0 support.
236236
}
237237

238-
// GrCaps defaults fClampToBorderSupport to true, so disable when unsupported
239-
if (kGL_GrGLStandard == standard) {
240-
// Clamp to border added in 1.3
241-
if (version < GR_GL_VER(1, 3) && !ctxInfo.hasExtension("GL_ARB_texture_border_clamp")) {
242-
fClampToBorderSupport = false;
243-
}
244-
} else if (kGLES_GrGLStandard == standard) {
245-
// GLES didn't have clamp to border until 3.2, but provides several alternative extensions
246-
if (version < GR_GL_VER(3, 2) && !ctxInfo.hasExtension("GL_EXT_texture_border_clamp") &&
247-
!ctxInfo.hasExtension("GL_NV_texture_border_clamp") &&
248-
!ctxInfo.hasExtension("GL_OES_texture_border_clamp")) {
249-
fClampToBorderSupport = false;
250-
}
251-
}
252-
253238
if (kGL_GrGLStandard == standard) {
254239
if (version >= GR_GL_VER(3,3) || ctxInfo.hasExtension("GL_ARB_texture_swizzle")) {
255240
fTextureSwizzleSupport = true;

src/gpu/gl/GrGLDefines.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -670,7 +670,6 @@
670670
#define GR_GL_REPEAT 0x2901
671671
#define GR_GL_CLAMP_TO_EDGE 0x812F
672672
#define GR_GL_MIRRORED_REPEAT 0x8370
673-
#define GR_GL_CLAMP_TO_BORDER 0x812D
674673

675674
/* Texture Swizzle */
676675
#define GR_GL_TEXTURE_SWIZZLE_R 0x8E42

src/gpu/gl/GrGLGpu.cpp

Lines changed: 9 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -202,16 +202,11 @@ static GrGLenum filter_to_gl_min_filter(GrSamplerState::Filter filter) {
202202
return 0;
203203
}
204204

205-
static inline GrGLenum wrap_mode_to_gl_wrap(GrSamplerState::WrapMode wrapMode,
206-
const GrCaps& caps) {
205+
static inline GrGLenum wrap_mode_to_gl_wrap(GrSamplerState::WrapMode wrapMode) {
207206
switch (wrapMode) {
208207
case GrSamplerState::WrapMode::kClamp: return GR_GL_CLAMP_TO_EDGE;
209208
case GrSamplerState::WrapMode::kRepeat: return GR_GL_REPEAT;
210209
case GrSamplerState::WrapMode::kMirrorRepeat: return GR_GL_MIRRORED_REPEAT;
211-
case GrSamplerState::WrapMode::kClampToBorder:
212-
// May not be supported but should have been caught earlier
213-
SkASSERT(caps.clampToBorderSupport());
214-
return GR_GL_CLAMP_TO_BORDER;
215210
}
216211
SK_ABORT("Unknown wrap mode");
217212
return 0;
@@ -247,8 +242,8 @@ class GrGLGpu::SamplerObjectCache {
247242
fSamplers[index] = s;
248243
auto minFilter = filter_to_gl_min_filter(state.filter());
249244
auto magFilter = filter_to_gl_mag_filter(state.filter());
250-
auto wrapX = wrap_mode_to_gl_wrap(state.wrapModeX(), fGpu->glCaps());
251-
auto wrapY = wrap_mode_to_gl_wrap(state.wrapModeY(), fGpu->glCaps());
245+
auto wrapX = wrap_mode_to_gl_wrap(state.wrapModeX());
246+
auto wrapY = wrap_mode_to_gl_wrap(state.wrapModeY());
252247
GR_GL_CALL(fGpu->glInterface(),
253248
SamplerParameteri(s, GR_GL_TEXTURE_MIN_FILTER, minFilter));
254249
GR_GL_CALL(fGpu->glInterface(),
@@ -289,16 +284,16 @@ class GrGLGpu::SamplerObjectCache {
289284
int filter = static_cast<int>(state.filter());
290285
SkASSERT(filter >= 0 && filter < 3);
291286
int wrapX = static_cast<int>(state.wrapModeX());
292-
SkASSERT(wrapX >= 0 && wrapX < 4);
287+
SkASSERT(wrapX >= 0 && wrapX < 3);
293288
int wrapY = static_cast<int>(state.wrapModeY());
294-
SkASSERT(wrapY >= 0 && wrapY < 4);
295-
int idx = 16 * filter + 4 * wrapX + wrapY;
289+
SkASSERT(wrapY >= 0 && wrapY < 3);
290+
int idx = 9 * filter + 3 * wrapX + wrapY;
296291
SkASSERT(idx < kNumSamplers);
297292
return idx;
298293
}
299294

300295
GrGLGpu* fGpu;
301-
static constexpr int kNumSamplers = 48;
296+
static constexpr int kNumSamplers = 27;
302297
std::unique_ptr<GrGLuint[]> fHWBoundSamplers;
303298
GrGLuint fSamplers[kNumSamplers];
304299
int fNumTextureUnits;
@@ -2859,8 +2854,8 @@ void GrGLGpu::bindTexture(int unitIdx, GrSamplerState samplerState, GrGLTexture*
28592854
newSamplerParams.fMinFilter = filter_to_gl_min_filter(samplerState.filter());
28602855
newSamplerParams.fMagFilter = filter_to_gl_mag_filter(samplerState.filter());
28612856

2862-
newSamplerParams.fWrapS = wrap_mode_to_gl_wrap(samplerState.wrapModeX(), this->glCaps());
2863-
newSamplerParams.fWrapT = wrap_mode_to_gl_wrap(samplerState.wrapModeY(), this->glCaps());
2857+
newSamplerParams.fWrapS = wrap_mode_to_gl_wrap(samplerState.wrapModeX());
2858+
newSamplerParams.fWrapT = wrap_mode_to_gl_wrap(samplerState.wrapModeY());
28642859

28652860
// These are the OpenGL default values.
28662861
newSamplerParams.fMinLOD = -1000;
@@ -2894,17 +2889,6 @@ void GrGLGpu::bindTexture(int unitIdx, GrSamplerState samplerState, GrGLTexture*
28942889
this->setTextureUnit(unitIdx);
28952890
GL_CALL(TexParameteri(target, GR_GL_TEXTURE_WRAP_T, newSamplerParams.fWrapT));
28962891
}
2897-
if (this->glCaps().clampToBorderSupport()) {
2898-
// Make sure the border color is transparent black (the default)
2899-
if (setAll || oldSamplerParams.fBorderColorInvalid) {
2900-
this->setTextureUnit(unitIdx);
2901-
// Specify the transparent black as normalized signed integers. The conversion is
2902-
// defined as (2c+1)/(2^32-1), which makes it impossible to map a signed in to
2903-
// exactly 0.f. But 1/(2^32-1) is close enough.
2904-
static const GrGLint kTransparentBlack[4] = {0, 0, 0, 0};
2905-
GL_CALL(TexParameteriv(target, GR_GL_TEXTURE_BORDER_COLOR, kTransparentBlack));
2906-
}
2907-
}
29082892
}
29092893
GrGLTexture::NonSamplerParams newNonSamplerParams;
29102894
newNonSamplerParams.fBaseMipMapLevel = 0;

src/gpu/gl/GrGLTexture.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,18 +27,13 @@ class GrGLTexture : public GrTexture {
2727
GrGLenum fWrapT = GR_GL_REPEAT;
2828
GrGLfloat fMinLOD = -1000.f;
2929
GrGLfloat fMaxLOD = 1000.f;
30-
// We always want the border color to be transparent black, so no need to store 4 floats.
31-
// Just track if it's been invalidated and no longer the default
32-
bool fBorderColorInvalid = false;
33-
3430
void invalidate() {
3531
fMinFilter = ~0U;
3632
fMagFilter = ~0U;
3733
fWrapS = ~0U;
3834
fWrapT = ~0U;
3935
fMinLOD = SK_ScalarNaN;
4036
fMaxLOD = SK_ScalarNaN;
41-
fBorderColorInvalid = true;
4237
}
4338
};
4439

src/gpu/mtl/GrMtlSampler.mm

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ static inline MTLSamplerAddressMode wrap_mode_to_mtl_sampler_address(
1818
return MTLSamplerAddressModeRepeat;
1919
case GrSamplerState::WrapMode::kMirrorRepeat:
2020
return MTLSamplerAddressModeMirrorRepeat;
21-
case GrSamplerState::WrapMode::kClampToBorder:
22-
return MTLSamplerAddressModeClampToBorderColor;
2321
}
2422
SK_ABORT("Unknown wrap mode.");
2523
return MTLSamplerAddressModeClampToEdge;

src/gpu/vk/GrVkSampler.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@ static inline VkSamplerAddressMode wrap_mode_to_vk_sampler_address(
1919
return VK_SAMPLER_ADDRESS_MODE_REPEAT;
2020
case GrSamplerState::WrapMode::kMirrorRepeat:
2121
return VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT;
22-
case GrSamplerState::WrapMode::kClampToBorder:
23-
return VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER;
2422
}
2523
SK_ABORT("Unknown wrap mode.");
2624
return VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;

src/shaders/SkImageShader.cpp

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,8 @@ static GrSamplerState::WrapMode tile_mode_to_wrap_mode(const SkShader::TileMode
171171
case SkShader::TileMode::kMirror_TileMode:
172172
return GrSamplerState::WrapMode::kMirrorRepeat;
173173
case SkShader::kDecal_TileMode:
174-
return GrSamplerState::WrapMode::kClampToBorder;
174+
// TODO: depending on caps, we should extend WrapMode for decal...
175+
return GrSamplerState::WrapMode::kClamp;
175176
}
176177
SK_ABORT("Unknown tile mode.");
177178
return GrSamplerState::WrapMode::kClamp;
@@ -187,19 +188,6 @@ std::unique_ptr<GrFragmentProcessor> SkImageShader::asFragmentProcessor(
187188

188189
GrSamplerState::WrapMode wrapModes[] = {tile_mode_to_wrap_mode(fTileModeX),
189190
tile_mode_to_wrap_mode(fTileModeY)};
190-
if ((wrapModes[0] == GrSamplerState::WrapMode::kClampToBorder ||
191-
wrapModes[1] == GrSamplerState::WrapMode::kClampToBorder) &&
192-
!args.fContext->contextPriv().caps()->clampToBorderSupport()) {
193-
// HW clamp to border is unavailable, so fall back to clamp for now
194-
// TODO(michaelludwig): If clamp-to-border is selected but is unsupported, the texture
195-
// domain effect could be used to emulate the decal effect.
196-
if (wrapModes[0] == GrSamplerState::WrapMode::kClampToBorder) {
197-
wrapModes[0] = GrSamplerState::WrapMode::kClamp;
198-
}
199-
if (wrapModes[1] == GrSamplerState::WrapMode::kClampToBorder) {
200-
wrapModes[1] = GrSamplerState::WrapMode::kClamp;
201-
}
202-
}
203191

204192
// Must set wrap and filter on the sampler before requesting a texture. In two places below
205193
// we check the matrix scale factors to determine how to interpret the filter quality setting.

0 commit comments

Comments
 (0)