Hash :
31641b8e
Author :
Date :
2021-06-05T02:17:47
Declare specialization constants in the AST A new qualifier (EvqSpecConst) is added so that specialization constants can be declared in tree. This enables TVariable references to specialization constants to be validated, which were in fact invalid as every reference declared a new variable. That is fixed. Bug: angleproject:4889 Change-Id: I1711e41cbc5a1260843d2d004d3568bdae11e963 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2941451 Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
//
// Copyright 2016 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// OutputVulkanGLSL:
// Code that outputs shaders that fit GL_KHR_vulkan_glsl, to be fed to glslang to generate
// SPIR-V.
// See: https://www.khronos.org/registry/vulkan/specs/misc/GL_KHR_vulkan_glsl.txt
//
#ifndef COMPILER_TRANSLATOR_OUTPUTVULKANGLSL_H_
#define COMPILER_TRANSLATOR_OUTPUTVULKANGLSL_H_
#include "compiler/translator/OutputGLSL.h"
namespace sh
{
class TOutputVulkanGLSL : public TOutputGLSL
{
public:
TOutputVulkanGLSL(TInfoSinkBase &objSink,
ShHashFunction64 hashFunction,
NameMap &nameMap,
TSymbolTable *symbolTable,
sh::GLenum shaderType,
int shaderVersion,
ShShaderOutput output,
bool forceHighp,
bool enablePrecision,
ShCompileOptions compileOptions);
uint32_t nextUnusedBinding() { return mNextUnusedBinding++; }
uint32_t nextUnusedInputLocation(uint32_t consumedCount)
{
uint32_t nextUnused = mNextUnusedInputLocation;
mNextUnusedInputLocation += consumedCount;
return nextUnused;
}
uint32_t nextUnusedOutputLocation(uint32_t consumedCount)
{
uint32_t nextUnused = mNextUnusedOutputLocation;
mNextUnusedOutputLocation += consumedCount;
return nextUnused;
}
protected:
void writeLayoutQualifier(TIntermSymbol *variable) override;
void writeVariableType(const TType &type,
const TSymbol *symbol,
bool isFunctionArgument) override;
bool writeVariablePrecision(TPrecision) override;
// Every resource that requires set & binding layout qualifiers is assigned set 0 and an
// arbitrary binding when outputting GLSL. Every input/output that requires a location
// layout qualifiers is assigned an arbitrary location as well.
//
// Glslang wrapper modifies set, binding and location decorations in SPIR-V directly.
uint32_t mNextUnusedBinding;
uint32_t mNextUnusedInputLocation;
uint32_t mNextUnusedOutputLocation;
private:
bool mForceHighp;
bool mEnablePrecision;
};
} // namespace sh
#endif // COMPILER_TRANSLATOR_OUTPUTVULKANGLSL_H_