Hash :
0e28c030
Author :
Date :
2025-04-02T17:26:28
ScalarizeVecAndMatConstructorArgs on WGSL shaders. WGSL does not support mixing types in the constructors of vectors and matrices. Use the ScalarizeVecAndMatConstructorArgs traverser to scalarize these constructors and update it to cast to the destination type if the inputs are not in that type already. Bug: angleproject:395659799 Change-Id: I4c270f2b18e79393e3c187916f33ad719bc88a63 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6427067 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Geoff Lang <geofflang@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 2024 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.
//
// ShaderWgpu.cpp:
// Implements the class methods for ShaderWgpu.
//
#include "libANGLE/renderer/wgpu/ShaderWgpu.h"
#include "common/debug.h"
#include "libANGLE/Context.h"
#include "libANGLE/renderer/ContextImpl.h"
#include "libANGLE/trace.h"
namespace rx
{
namespace
{
class ShaderTranslateTaskWgpu final : public ShaderTranslateTask
{
bool translate(ShHandle compiler,
const ShCompileOptions &options,
const std::string &source) override
{
ANGLE_TRACE_EVENT1("gpu.angle", "ShaderTranslateTaskWgpu::translate", "source", source);
const char *srcStrings[] = {source.c_str()};
return sh::Compile(compiler, srcStrings, ArraySize(srcStrings), options);
}
void postTranslate(ShHandle compiler, const gl::CompiledShaderState &compiledState) override {}
};
} // namespace
ShaderWgpu::ShaderWgpu(const gl::ShaderState &data) : ShaderImpl(data) {}
ShaderWgpu::~ShaderWgpu() {}
std::shared_ptr<ShaderTranslateTask> ShaderWgpu::compile(const gl::Context *context,
ShCompileOptions *options)
{
const gl::Extensions &extensions = context->getImplementation()->getExtensions();
if (extensions.shaderPixelLocalStorageANGLE)
{
options->pls = context->getImplementation()->getNativePixelLocalStorageOptions();
}
options->validateAST = true;
options->separateCompoundStructDeclarations = true;
options->scalarizeVecAndMatConstructorArgs = true;
return std::shared_ptr<ShaderTranslateTask>(new ShaderTranslateTaskWgpu);
}
std::shared_ptr<ShaderTranslateTask> ShaderWgpu::load(const gl::Context *context,
gl::BinaryInputStream *stream)
{
UNREACHABLE();
return std::shared_ptr<ShaderTranslateTask>(new ShaderTranslateTask);
}
std::string ShaderWgpu::getDebugInfo() const
{
return "";
}
} // namespace rx