From 8a914f4293fd64ea4842e553828fb37f589703be Mon Sep 17 00:00:00 2001 From: Chow Date: Tue, 24 Dec 2019 11:49:02 +0800 Subject: [PATCH] Add Error check flag in io mapper GLSL could detect contradictory uniform binding, but missing error reporting, even if we could now observe error inside infosink. Add error check when first time validate uniform binding. When doing traversal, it should be zero error. This error check flag will be used during linking time. To quickly report errors like contradictory uniform bindings. Add error check flags for TDefaultGlslIoResolver when catching EPrefixInternalError --- glslang/MachineIndependent/iomapper.cpp | 3 +++ glslang/MachineIndependent/iomapper.h | 1 + 2 files changed, 4 insertions(+) diff --git a/glslang/MachineIndependent/iomapper.cpp b/glslang/MachineIndependent/iomapper.cpp index 3262c0a203..4856422741 100644 --- a/glslang/MachineIndependent/iomapper.cpp +++ b/glslang/MachineIndependent/iomapper.cpp @@ -831,6 +831,7 @@ void TDefaultGlslIoResolver::reserverStorageSlot(TVarEntryInfo& ent, TInfoSink& if (iter->second != location) { TString errorMsg = "Invalid location: " + name; infoSink.info.message(EPrefixInternalError, errorMsg.c_str()); + hasError = true; } } } @@ -856,6 +857,7 @@ void TDefaultGlslIoResolver::reserverStorageSlot(TVarEntryInfo& ent, TInfoSink& if (iter->second != location) { TString errorMsg = "Invalid location: " + name; infoSink.info.message(EPrefixInternalError, errorMsg.c_str()); + hasError = true; } } } @@ -884,6 +886,7 @@ void TDefaultGlslIoResolver::reserverResourceSlot(TVarEntryInfo& ent, TInfoSink& if (iter->second != binding) { TString errorMsg = "Invalid binding: " + name; infoSink.info.message(EPrefixInternalError, errorMsg.c_str()); + hasError = true; } } } diff --git a/glslang/MachineIndependent/iomapper.h b/glslang/MachineIndependent/iomapper.h index 684e88d571..933e259f2f 100644 --- a/glslang/MachineIndependent/iomapper.h +++ b/glslang/MachineIndependent/iomapper.h @@ -129,6 +129,7 @@ struct TDefaultIoResolverBase : public glslang::TIoMapResolver { uint32_t computeTypeLocationSize(const TType& type, EShLanguage stage); TSlotSetMap slots; + bool hasError = false; protected: TDefaultIoResolverBase(TDefaultIoResolverBase&);