Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 1247773905f1474dd11fd62a3ceeee8f14e9c16b
https://github.com/WebKit/WebKit/commit/1247773905f1474dd11fd62a3ceeee8f14e9c16b
Author: Tadeu Zagallo <[email protected]>
Date: 2023-11-01 (Wed, 01 Nov 2023)
Changed paths:
M Source/WebGPU/WGSL/AttributeValidator.cpp
M Source/WebGPU/WGSL/ConstantFunctions.h
M Source/WebGPU/WGSL/ConstantValue.cpp
M Source/WebGPU/WGSL/ConstantValue.h
M Source/WebGPU/WGSL/Metal/MetalFunctionWriter.cpp
M Source/WebGPU/WGSL/TypeCheck.cpp
M Source/WebGPU/WebGPU/ComputePipeline.mm
M Source/WebGPU/WebGPU/Pipeline.mm
Log Message:
-----------
[WGSL] ConstantValue should be more precise
https://bugs.webkit.org/show_bug.cgi?id=263984
rdar://117749165
Reviewed by Mike Wyrzykowski.
Currently, we use 3 types to represent constant scalars: bool, int64_t and
double.
These are technically sufficient, as they can fit all the possible scalar
values.
However, constant functions need to be able to distinguish between the different
types of scalars, e.g. i32 vs u32 vs abstract_int. We could do that in two ways:
we could add a `Type*` to ConstantValue, which was the original approach, or we
can add more representations to ConstantValue (int32_t and uint32_t in this
case).
- The issue with the first approach, and the reason I removed the type from
ConstantValue,
is that every intermediate value must be assigned a type, which means we have
to construct these types and that is quite verbose.
- The second approach, which is the one this PR uses, makes sure that every
scalar
has its own representation in ConstantValue, this allows using only the value
as
the source of truth without having to also carry the type around. The
downside is
that we must guarantee that the two are kept in sync. This has been helpful
while
writing this PR though, as it highlights places where the two have diverged,
and
forces us to perform the correct conversion of the values.
* Source/WebGPU/WGSL/AttributeValidator.cpp:
(WGSL::AttributeValidator::visit):
(WGSL::AttributeValidator::parseLocation):
* Source/WebGPU/WGSL/ConstantFunctions.h:
(WGSL::zeroValue):
(WGSL::constantUnaryOperation):
(WGSL::constantBinaryOperation):
(WGSL::constantTernaryOperation):
(WGSL::constantConstructor):
(WGSL::constantAdd):
(WGSL::constantMultiply):
(WGSL::BINARY_OPERATION):
(WGSL::constantBitwiseOr):
(WGSL::constantBitwiseAnd):
(WGSL::UNARY_OPERATION):
(WGSL::constantCross):
(WGSL::constantDeterminant):
(WGSL::constantDot):
(WGSL::constantLength):
(WGSL::constantExtractBits):
(WGSL::constantFaceForward):
(WGSL::constantInsertBits):
(WGSL::constantLdexp):
(WGSL::constantNormalize):
(WGSL::constantReflect):
(WGSL::constantRefract):
(WGSL::TERNARY_OPERATION):
(WGSL::constantInverseSqrt): Deleted.
* Source/WebGPU/WGSL/ConstantValue.cpp:
(WGSL::ConstantValue::dump const):
* Source/WebGPU/WGSL/ConstantValue.h:
(WGSL::ConstantValue::isI32 const):
(WGSL::ConstantValue::isU32 const):
(WGSL::ConstantValue::isAbstractInt const):
(WGSL::ConstantValue::isF32 const):
(WGSL::ConstantValue::isAbstractFloat const):
(WGSL::ConstantValue::toF32 const):
(WGSL::ConstantValue::integerValue const):
(WGSL::ConstantValue::isInt const): Deleted.
(WGSL::ConstantValue::isNumber const): Deleted.
(WGSL::ConstantValue::toInt const): Deleted.
(WGSL::ConstantValue::toDouble const): Deleted.
* Source/WebGPU/WGSL/Metal/MetalFunctionWriter.cpp:
(WGSL::Metal::FunctionDefinitionWriter::visit):
(WGSL::Metal::FunctionDefinitionWriter::serializeConstant):
* Source/WebGPU/WGSL/TypeCheck.cpp:
(WGSL::TypeChecker::visitVariable):
(WGSL::TypeChecker::visit):
(WGSL::TypeChecker::chooseOverload):
(WGSL::TypeChecker::convertValue):
* Source/WebGPU/WebGPU/ComputePipeline.mm:
(WebGPU::metalSize):
* Source/WebGPU/WebGPU/Pipeline.mm:
(WebGPU::createConstantValues):
Canonical link: https://commits.webkit.org/270052@main
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes