add some missing bitfield initializers
OK this one is cool.
GrGLCaps::onSurfaceSupportsWritePixels() starts off like
bool GrGLCaps::onSurfaceSupportsWritePixels(const GrSurface* surface) const {
if (fDisallowTexSubImageForUnormConfigTexturesEverBoundToFBO) {
...
Clang compiles this into
53e5: cmpl $0x0,0x94(%rdi)
53ec: js 5435 <GrGLCaps::onSurfaceSupportsWritePixels(GrSurface const*) const+0x5d>
I think what's going on is that
fDisallowTexSubImageForUnormConfigTexturesEverBoundToFBO is the 32nd of
a bunch of neighboring bitfields, and that makes it the top bit of the 4
bytes at a 0x94 byte offset from GrGLCaps (rdi == this). The cmpl/js
combo is reading that whole 4-byte chunk of bitfields and asking "is
this negative", a fun and I'm sure efficient way to test that bit.
Now I bet Valgrind thinks all those bits need to be initialized to
answer that question, and I also bet GCC just slapped a big 4-byte 0
down onto all these bitfields, incidentally initializing the fields we
leave uninitialized. In any case I think it's healthy to initialize
these fields. Shame there aren't any bitfield initializers until C++20.
Think it's too early to upgrade?
Change-Id: I767515190cf1ed08cf1d6981e550a65ccaffdec5
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/255419
Reviewed-by: Ben Wagner aka dogben <benjaminwagner@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
1 file changed