Use SkSpan for dehydrated module data.
This code was written before we had spans.
Change-Id: Ic4356dbb2c93a27b4f39e6614a7cd9996e6b144b
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/584227
Commit-Queue: Brian Osman <brianosman@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
diff --git a/src/sksl/SkSLCompiler.cpp b/src/sksl/SkSLCompiler.cpp
index 3896df9..afa7bb7 100644
--- a/src/sksl/SkSLCompiler.cpp
+++ b/src/sksl/SkSLCompiler.cpp
@@ -185,8 +185,8 @@
config.fIsBuiltinCode = true;
config.fKind = kind;
AutoProgramConfig autoConfig(fContext, &config);
- SkASSERT(data.fData && (data.fSize != 0));
- Rehydrator rehydrator(*this, data.fData, data.fSize, std::move(base));
+ SkASSERT(!data.fData.empty());
+ Rehydrator rehydrator(*this, data.fData, std::move(base));
LoadedModule module = {kind, rehydrator.symbolTable(), rehydrator.elements()};
#else
SkASSERT(this->errorCount() == 0);
diff --git a/src/sksl/SkSLCompiler.h b/src/sksl/SkSLCompiler.h
index bbfbfc0..ec8305c 100644
--- a/src/sksl/SkSLCompiler.h
+++ b/src/sksl/SkSLCompiler.h
@@ -9,6 +9,7 @@
#define SKSL_COMPILER
#include "include/core/SkSize.h"
+#include "include/core/SkSpan.h"
#include "include/core/SkTypes.h"
#include "include/private/SkSLDefines.h"
#include "include/private/SkSLProgramElement.h"
@@ -19,7 +20,6 @@
#include "src/sksl/SkSLParsedModule.h"
#include <array>
-#include <cstddef>
#include <cstdint>
#include <memory>
#include <string>
@@ -101,7 +101,7 @@
}
/**
- * Uniform values by the compiler to implement origin-neutral dFdy, sk_Clockwise, and
+ * Uniform values used by the compiler to implement origin-neutral dFdy, sk_Clockwise, and
* sk_FragCoord.
*/
static std::array<float, 2> GetRTFlipVector(int rtHeight, bool flipY) {
@@ -195,20 +195,18 @@
return fSymbolTable;
}
- // When SKSL_STANDALONE, fPath is used. (fData, fSize) will be (nullptr, 0)
- // When !SKSL_STANDALONE, fData and fSize are used. fPath will be nullptr.
+ // When SKSL_STANDALONE, fPath is used. fData will be empty.
+ // When !SKSL_STANDALONE, fData is used. fPath will be nullptr.
struct ModuleData {
- const char* fPath;
-
- const uint8_t* fData;
- size_t fSize;
+ const char* fPath;
+ SkSpan<const uint8_t> fData;
};
static ModuleData MakeModulePath(const char* path) {
- return ModuleData{path, /*fData=*/nullptr, /*fSize=*/0};
+ return ModuleData{path, /*fData=*/{}};
}
- static ModuleData MakeModuleData(const uint8_t* data, size_t size) {
- return ModuleData{/*fPath=*/nullptr, data, size};
+ static ModuleData MakeModuleData(SkSpan<const uint8_t> data) {
+ return ModuleData{/*fPath=*/nullptr, data};
}
LoadedModule loadModule(ProgramKind kind, ModuleData data, ModifiersPool& modifiersPool,
diff --git a/src/sksl/SkSLModuleLoader.cpp b/src/sksl/SkSLModuleLoader.cpp
index 5ea65f3..6768336 100644
--- a/src/sksl/SkSLModuleLoader.cpp
+++ b/src/sksl/SkSLModuleLoader.cpp
@@ -5,6 +5,7 @@
* found in the LICENSE file.
*/
+#include "include/core/SkSpan.h"
#include "include/private/SkMutex.h"
#include "include/private/SkSLModifiers.h"
#include "include/private/SkSLProgramKind.h"
@@ -41,8 +42,7 @@
#include "src/sksl/generated/sksl_graphite_vert.dehydrated.sksl"
#endif
- #define MODULE_DATA(name) Compiler::MakeModuleData(SKSL_INCLUDE_sksl_##name,\
- SKSL_INCLUDE_sksl_##name##_LENGTH)
+ #define MODULE_DATA(name) Compiler::MakeModuleData(SkSpan(SKSL_INCLUDE_sksl_##name))
#endif
diff --git a/src/sksl/SkSLRehydrator.cpp b/src/sksl/SkSLRehydrator.cpp
index 803c3b4..fd95edc 100644
--- a/src/sksl/SkSLRehydrator.cpp
+++ b/src/sksl/SkSLRehydrator.cpp
@@ -100,17 +100,18 @@
std::shared_ptr<SymbolTable> fOldSymbols;
};
-Rehydrator::Rehydrator(Compiler& compiler, const uint8_t* src, size_t length)
- : Rehydrator(compiler, src, length, ModuleLoader::Get().rootSymbolTableWithPublicTypes()) {}
+Rehydrator::Rehydrator(Compiler& compiler, SkSpan<const uint8_t> src)
+ : Rehydrator(compiler, src, ModuleLoader::Get().rootSymbolTableWithPublicTypes()) {}
-Rehydrator::Rehydrator(Compiler& compiler, const uint8_t* src, size_t length,
+Rehydrator::Rehydrator(Compiler& compiler,
+ SkSpan<const uint8_t> src,
std::shared_ptr<SymbolTable> symbols)
- : fCompiler(compiler)
- , fSymbolTable(std::move(symbols))
- SkDEBUGCODE(, fEnd(src + length)) {
+ : fCompiler(compiler)
+ , fSymbolTable(std::move(symbols))
+ SkDEBUGCODE(, fEnd(src.data() + src.size())) {
SkASSERT(fSymbolTable);
SkASSERT(fSymbolTable->isBuiltin());
- fIP = src;
+ fIP = src.data();
[[maybe_unused]] uint16_t version = this->readU16();
SkASSERTF(version == kVersion, "Dehydrated file is an unsupported version (current version is "
"%d, found version %d)", kVersion, version);
diff --git a/src/sksl/SkSLRehydrator.h b/src/sksl/SkSLRehydrator.h
index a279fc6..af4f0a2 100644
--- a/src/sksl/SkSLRehydrator.h
+++ b/src/sksl/SkSLRehydrator.h
@@ -8,6 +8,7 @@
#ifndef SKSL_REHYDRATOR
#define SKSL_REHYDRATOR
+#include "include/core/SkSpan.h"
#include "include/core/SkTypes.h"
#include "include/private/SkSLDefines.h"
#include "include/private/SkSLLayout.h"
@@ -105,11 +106,13 @@
kVoid_Command,
};
- // src must remain in memory as long as the objects created from it do
- Rehydrator(Compiler& compiler, const uint8_t* src, size_t length);
+ // The source data (`src`) must remain in memory as long as any rehydrated objects exist.
+ Rehydrator(Compiler& compiler, SkSpan<const uint8_t> src, std::shared_ptr<SymbolTable> base);
- Rehydrator(Compiler& compiler, const uint8_t* src, size_t length,
- std::shared_ptr<SymbolTable> base);
+ // FOR TESTING ONLY: the base symbol table is assumed to be the root table with public types.
+ // As above, `src` must remain alive for the lifetime of the rehydrated objects.
+ Rehydrator(Compiler& compiler, SkSpan<const uint8_t> src);
+
#ifdef SK_DEBUG
~Rehydrator();
diff --git a/src/sksl/generated/sksl_compute.dehydrated.sksl b/src/sksl/generated/sksl_compute.dehydrated.sksl
index eaa04bb..c22197a 100644
--- a/src/sksl/generated/sksl_compute.dehydrated.sksl
+++ b/src/sksl/generated/sksl_compute.dehydrated.sksl
@@ -79,4 +79,3 @@
51,255,255,20,0,0,
57,
21,};
-static constexpr size_t SKSL_INCLUDE_sksl_compute_LENGTH = sizeof(SKSL_INCLUDE_sksl_compute);
diff --git a/src/sksl/generated/sksl_frag.dehydrated.sksl b/src/sksl/generated/sksl_frag.dehydrated.sksl
index fc3a7d5..47be0b3 100644
--- a/src/sksl/generated/sksl_frag.dehydrated.sksl
+++ b/src/sksl/generated/sksl_frag.dehydrated.sksl
@@ -55,4 +55,3 @@
51,255,255,53,0,0,
57,
21,};
-static constexpr size_t SKSL_INCLUDE_sksl_frag_LENGTH = sizeof(SKSL_INCLUDE_sksl_frag);
diff --git a/src/sksl/generated/sksl_gpu.dehydrated.sksl b/src/sksl/generated/sksl_gpu.dehydrated.sksl
index 0a61ead..c67543d 100644
--- a/src/sksl/generated/sksl_gpu.dehydrated.sksl
+++ b/src/sksl/generated/sksl_gpu.dehydrated.sksl
@@ -2869,4 +2869,3 @@
56,24,1,0,
56,25,1,0,1,
21,};
-static constexpr size_t SKSL_INCLUDE_sksl_gpu_LENGTH = sizeof(SKSL_INCLUDE_sksl_gpu);
diff --git a/src/sksl/generated/sksl_graphite_frag.dehydrated.sksl b/src/sksl/generated/sksl_graphite_frag.dehydrated.sksl
index 398c341..39763f8 100644
--- a/src/sksl/generated/sksl_graphite_frag.dehydrated.sksl
+++ b/src/sksl/generated/sksl_graphite_frag.dehydrated.sksl
@@ -3475,4 +3475,3 @@
51,255,255,120,0,1,
56,227,0,0,1,
21,};
-static constexpr size_t SKSL_INCLUDE_sksl_graphite_frag_LENGTH = sizeof(SKSL_INCLUDE_sksl_graphite_frag);
diff --git a/src/sksl/generated/sksl_graphite_vert.dehydrated.sksl b/src/sksl/generated/sksl_graphite_vert.dehydrated.sksl
index 326e86a..dd207f0 100644
--- a/src/sksl/generated/sksl_graphite_vert.dehydrated.sksl
+++ b/src/sksl/generated/sksl_graphite_vert.dehydrated.sksl
@@ -2741,4 +2741,3 @@
56,71,0,0,
56,135,0,0,1,1,
21,};
-static constexpr size_t SKSL_INCLUDE_sksl_graphite_vert_LENGTH = sizeof(SKSL_INCLUDE_sksl_graphite_vert);
diff --git a/src/sksl/generated/sksl_public.dehydrated.sksl b/src/sksl/generated/sksl_public.dehydrated.sksl
index 4217ec1..135f925 100644
--- a/src/sksl/generated/sksl_public.dehydrated.sksl
+++ b/src/sksl/generated/sksl_public.dehydrated.sksl
@@ -76,4 +76,3 @@
1,0,
20,
21,};
-static constexpr size_t SKSL_INCLUDE_sksl_public_LENGTH = sizeof(SKSL_INCLUDE_sksl_public);
diff --git a/src/sksl/generated/sksl_rt_shader.dehydrated.sksl b/src/sksl/generated/sksl_rt_shader.dehydrated.sksl
index 7c73a67..fbc86d0 100644
--- a/src/sksl/generated/sksl_rt_shader.dehydrated.sksl
+++ b/src/sksl/generated/sksl_rt_shader.dehydrated.sksl
@@ -13,4 +13,3 @@
51,255,255,15,0,0,
57,
21,};
-static constexpr size_t SKSL_INCLUDE_sksl_rt_shader_LENGTH = sizeof(SKSL_INCLUDE_sksl_rt_shader);
diff --git a/src/sksl/generated/sksl_shared.dehydrated.sksl b/src/sksl/generated/sksl_shared.dehydrated.sksl
index 2c3b6df..692195b 100644
--- a/src/sksl/generated/sksl_shared.dehydrated.sksl
+++ b/src/sksl/generated/sksl_shared.dehydrated.sksl
@@ -2705,4 +2705,3 @@
56,5,2,0,
56,5,2,0,1,
21,};
-static constexpr size_t SKSL_INCLUDE_sksl_shared_LENGTH = sizeof(SKSL_INCLUDE_sksl_shared);
diff --git a/src/sksl/generated/sksl_vert.dehydrated.sksl b/src/sksl/generated/sksl_vert.dehydrated.sksl
index 8ccf3ee..231e8f9 100644
--- a/src/sksl/generated/sksl_vert.dehydrated.sksl
+++ b/src/sksl/generated/sksl_vert.dehydrated.sksl
@@ -46,4 +46,3 @@
51,255,255,65,0,0,
57,
21,};
-static constexpr size_t SKSL_INCLUDE_sksl_vert_LENGTH = sizeof(SKSL_INCLUDE_sksl_vert);
diff --git a/tests/SkSLTest.cpp b/tests/SkSLTest.cpp
index 2f4b65e..9f109fa 100644
--- a/tests/SkSLTest.cpp
+++ b/tests/SkSLTest.cpp
@@ -338,9 +338,9 @@
SkSL::StringStream stream;
dehydrator.finish(stream);
- SkSL::Rehydrator rehydrator(compiler,
- reinterpret_cast<const uint8_t*>(stream.str().data()),
- stream.str().length());
+ SkSpan<const uint8_t> dehydratedData(reinterpret_cast<const uint8_t*>(stream.str().data()),
+ stream.str().size());
+ SkSL::Rehydrator rehydrator(compiler, dehydratedData);
std::unique_ptr<SkSL::Program> rehydrated = rehydrator.program();
REPORTER_ASSERT(r, rehydrated->description() == program->description(),
"%s: Mismatch between original and dehydrated/rehydrated:\n"
diff --git a/tools/sksl-precompile/SkSLPrecompile.cpp b/tools/sksl-precompile/SkSLPrecompile.cpp
index 657782e..c891817 100644
--- a/tools/sksl-precompile/SkSLPrecompile.cpp
+++ b/tools/sksl-precompile/SkSLPrecompile.cpp
@@ -130,8 +130,6 @@
out.printf("%s%d,", dehydrator.prefixAtOffset(i), uint8_t(data[i]));
}
out.printf("};\n");
- out.printf("static constexpr size_t SKSL_INCLUDE_%s_LENGTH = sizeof(SKSL_INCLUDE_%s);\n",
- baseName.c_str(), baseName.c_str());
if (!out.close()) {
printf("error writing '%s'\n", outputPath.c_str());
return ResultCode::kOutputError;