Hash :
2df17a12
Author :
Date :
2022-05-25T16:18:37
Vulkan: Pack driver uniforms Previously 5 vec4s were used for driver uniforms + 2 vec4s if specialization constants couldn't be supported. The driver uniforms are rearranged and packed such that only 2 vec4s are normally used, which include fallback for specialization constants as well. In the future, most of the specialization constants may turn into uniforms, and this change prepares for that. Additional uniforms are used (3 vec4s) only if common extensions are missing; transform feedback and bresenham lines. This change makes it more practical for driver uniforms to be turned into push constants. Additionally, these uniforms could potentially be loaded and cached at the beginning of the shader for more efficient memory access. On Pixel6, with this change, the traces show no difference in wall time. On most traces, CPU time shows up to ~7% improvement. Bug: angleproject:7366 Change-Id: I0f47f863955af06a19c69d1f1d7c45b97d95476e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3668151 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
//
// Copyright 2020 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.
//
// DriverUniformMetal:
// Struct defining the default driver uniforms for direct and SpirV based ANGLE translation
//
#ifndef LIBANGLE_RENDERER_METAL_DRIVERUNIFORMMETAL_H_
#define LIBANGLE_RENDERER_METAL_DRIVERUNIFORMMETAL_H_
#include "compiler/translator/tree_util/DriverUniform.h"
namespace sh
{
class DriverUniformMetal : public DriverUniformExtended
{
public:
DriverUniformMetal(DriverUniformMode mode) : DriverUniformExtended(mode) {}
DriverUniformMetal() : DriverUniformExtended(DriverUniformMode::InterfaceBlock) {}
~DriverUniformMetal() override {}
TIntermTyped *getCoverageMaskField() const;
protected:
TFieldList *createUniformFields(TSymbolTable *symbolTable) override;
};
} // namespace sh
#endif /* LIBANGLE_RENDERER_METAL_DRIVERUNIFORMMETAL_H_ */