mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-12-21 10:49:14 +00:00
tint/transform: Implement div / mod polyfill
Prevents UB for divide-by-zero and integer overflow when dividing Fixed: tint:1349 Change-Id: Ieef66d27d7aec3011628ced076b2bccc7770a8af Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/108925 Commit-Queue: Ben Clayton <bclayton@google.com> Reviewed-by: Dan Sinclair <dsinclair@chromium.org> Kokoro: Kokoro <noreply+kokoro@google.com>
This commit is contained in:
committed by
Dawn LUCI CQ
parent
9418152d08
commit
46ee63933c
@@ -1,27 +1,44 @@
|
||||
; SPIR-V
|
||||
; Version: 1.3
|
||||
; Generator: Google Tint Compiler; 0
|
||||
; Bound: 16
|
||||
; Bound: 28
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %f "f"
|
||||
OpExecutionMode %f LocalSize 1 1 1
|
||||
OpName %tint_div "tint_div"
|
||||
OpName %lhs "lhs"
|
||||
OpName %rhs "rhs"
|
||||
OpName %f "f"
|
||||
%void = OpTypeVoid
|
||||
%1 = OpTypeFunction %void
|
||||
%uint = OpTypeInt 32 0
|
||||
%v3uint = OpTypeVector %uint 3
|
||||
%1 = OpTypeFunction %v3uint %v3uint %v3uint
|
||||
%9 = OpConstantNull %v3uint
|
||||
%bool = OpTypeBool
|
||||
%v3bool = OpTypeVector %bool 3
|
||||
%uint_1 = OpConstant %uint 1
|
||||
%14 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
|
||||
%void = OpTypeVoid
|
||||
%16 = OpTypeFunction %void
|
||||
%uint_2 = OpConstant %uint 2
|
||||
%uint_3 = OpConstant %uint 3
|
||||
%10 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
|
||||
%22 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
|
||||
%uint_4 = OpConstant %uint 4
|
||||
%uint_5 = OpConstant %uint 5
|
||||
%uint_6 = OpConstant %uint 6
|
||||
%14 = OpConstantComposite %v3uint %uint_4 %uint_5 %uint_6
|
||||
%f = OpFunction %void None %1
|
||||
%4 = OpLabel
|
||||
%15 = OpUDiv %v3uint %10 %14
|
||||
%26 = OpConstantComposite %v3uint %uint_4 %uint_5 %uint_6
|
||||
%tint_div = OpFunction %v3uint None %1
|
||||
%lhs = OpFunctionParameter %v3uint
|
||||
%rhs = OpFunctionParameter %v3uint
|
||||
%7 = OpLabel
|
||||
%10 = OpIEqual %v3bool %rhs %9
|
||||
%8 = OpSelect %v3uint %10 %14 %rhs
|
||||
%15 = OpUDiv %v3uint %lhs %8
|
||||
OpReturnValue %15
|
||||
OpFunctionEnd
|
||||
%f = OpFunction %void None %16
|
||||
%19 = OpLabel
|
||||
%27 = OpFunctionCall %v3uint %tint_div %22 %26
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
|
||||
Reference in New Issue
Block a user