Implement addition and subtraction of float matrices

Bug: tint:316
Change-Id: I3a1082c41c47daacf0220d029cb2a5f118684959
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/52580
Commit-Queue: Antonio Maiorano <amaiorano@google.com>
Commit-Queue: David Neto <dneto@google.com>
Reviewed-by: David Neto <dneto@google.com>
This commit is contained in:
Antonio Maiorano
2021-05-31 15:53:20 +00:00
committed by Tint LUCI CQ
parent 34c58a932c
commit c91f8f2822
11 changed files with 399 additions and 28 deletions

View File

@@ -64,6 +64,19 @@ fn scalar_vector_u32() {
r = s % v;
}
fn matrix_matrix_f32() {
var m34 : mat3x4<f32>;
var m43 : mat4x3<f32>;
var m33 : mat3x3<f32>;
var m44 : mat4x4<f32>;
m34 = m34 + m34;
m34 = m34 - m34;
m33 = m43 * m34;
m44 = m34 * m43;
}
[[stage(fragment)]]
fn main() -> [[location(0)]] vec4<f32> {
return vec4<f32>(0.0,0.0,0.0,0.0);

View File

@@ -66,6 +66,17 @@ void scalar_vector_u32() {
r = (s % v);
}
void matrix_matrix_f32() {
float3x4 m34 = float3x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
float4x3 m43 = float4x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
float3x3 m33 = float3x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
float4x4 m44 = float4x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
m34 = (m34 + m34);
m34 = (m34 - m34);
m33 = mul(m34, m43);
m44 = mul(m43, m34);
}
tint_symbol main() {
const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
return tint_symbol_1;

View File

@@ -69,6 +69,17 @@ void scalar_vector_u32() {
r = (s % v);
}
void matrix_matrix_f32() {
float3x4 m34 = float3x4(0.0f);
float4x3 m43 = float4x3(0.0f);
float3x3 m33 = float3x3(0.0f);
float4x4 m44 = float4x4(0.0f);
m34 = (m34 + m34);
m34 = (m34 - m34);
m33 = (m43 * m34);
m44 = (m34 * m43);
}
fragment tint_symbol_1 tint_symbol() {
return {float4(0.0f, 0.0f, 0.0f, 0.0f)};
}

View File

@@ -1,7 +1,7 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
; Bound: 200
; Bound: 250
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
@@ -32,6 +32,11 @@
OpName %v_4 "v"
OpName %s_4 "s"
OpName %r_4 "r"
OpName %matrix_matrix_f32 "matrix_matrix_f32"
OpName %m34 "m34"
OpName %m43 "m43"
OpName %m33 "m33"
OpName %m44 "m44"
OpName %tint_symbol_2 "tint_symbol_2"
OpName %tint_symbol "tint_symbol"
OpName %main "main"
@@ -60,9 +65,21 @@
%78 = OpConstantNull %v3uint
%_ptr_Function_uint = OpTypePointer Function %uint
%81 = OpConstantNull %uint
%191 = OpTypeFunction %void %v4float
%mat3v4float = OpTypeMatrix %v4float 3
%_ptr_Function_mat3v4float = OpTypePointer Function %mat3v4float
%196 = OpConstantNull %mat3v4float
%mat4v3float = OpTypeMatrix %v3float 4
%_ptr_Function_mat4v3float = OpTypePointer Function %mat4v3float
%200 = OpConstantNull %mat4v3float
%mat3v3float = OpTypeMatrix %v3float 3
%_ptr_Function_mat3v3float = OpTypePointer Function %mat3v3float
%204 = OpConstantNull %mat3v3float
%mat4v4float = OpTypeMatrix %v4float 4
%_ptr_Function_mat4v4float = OpTypePointer Function %mat4v4float
%208 = OpConstantNull %mat4v4float
%241 = OpTypeFunction %void %v4float
%float_0 = OpConstant %float 0
%199 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
%249 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
%vector_scalar_f32 = OpFunction %void None %6
%9 = OpLabel
%v = OpVariable %_ptr_Function_v3float Function %13
@@ -269,14 +286,56 @@
OpStore %r_4 %188
OpReturn
OpFunctionEnd
%tint_symbol_2 = OpFunction %void None %191
%matrix_matrix_f32 = OpFunction %void None %6
%192 = OpLabel
%m34 = OpVariable %_ptr_Function_mat3v4float Function %196
%m43 = OpVariable %_ptr_Function_mat4v3float Function %200
%m33 = OpVariable %_ptr_Function_mat3v3float Function %204
%m44 = OpVariable %_ptr_Function_mat4v4float Function %208
%209 = OpLoad %mat3v4float %m34
%210 = OpLoad %mat3v4float %m34
%212 = OpCompositeExtract %v4float %209 0
%213 = OpCompositeExtract %v4float %210 0
%214 = OpFAdd %v4float %212 %213
%215 = OpCompositeExtract %v4float %209 1
%216 = OpCompositeExtract %v4float %210 1
%217 = OpFAdd %v4float %215 %216
%218 = OpCompositeExtract %v4float %209 2
%219 = OpCompositeExtract %v4float %210 2
%220 = OpFAdd %v4float %218 %219
%221 = OpCompositeConstruct %mat3v4float %214 %217 %220
OpStore %m34 %221
%222 = OpLoad %mat3v4float %m34
%223 = OpLoad %mat3v4float %m34
%225 = OpCompositeExtract %v4float %222 0
%226 = OpCompositeExtract %v4float %223 0
%227 = OpFSub %v4float %225 %226
%228 = OpCompositeExtract %v4float %222 1
%229 = OpCompositeExtract %v4float %223 1
%230 = OpFSub %v4float %228 %229
%231 = OpCompositeExtract %v4float %222 2
%232 = OpCompositeExtract %v4float %223 2
%233 = OpFSub %v4float %231 %232
%234 = OpCompositeConstruct %mat3v4float %227 %230 %233
OpStore %m34 %234
%235 = OpLoad %mat4v3float %m43
%236 = OpLoad %mat3v4float %m34
%237 = OpMatrixTimesMatrix %mat3v3float %235 %236
OpStore %m33 %237
%238 = OpLoad %mat3v4float %m34
%239 = OpLoad %mat4v3float %m43
%240 = OpMatrixTimesMatrix %mat4v4float %238 %239
OpStore %m44 %240
OpReturn
OpFunctionEnd
%tint_symbol_2 = OpFunction %void None %241
%tint_symbol = OpFunctionParameter %v4float
%194 = OpLabel
%244 = OpLabel
OpStore %tint_symbol_1 %tint_symbol
OpReturn
OpFunctionEnd
%main = OpFunction %void None %6
%196 = OpLabel
%197 = OpFunctionCall %void %tint_symbol_2 %199
%246 = OpLabel
%247 = OpFunctionCall %void %tint_symbol_2 %249
OpReturn
OpFunctionEnd

View File

@@ -62,6 +62,17 @@ fn scalar_vector_u32() {
r = (s % v);
}
fn matrix_matrix_f32() {
var m34 : mat3x4<f32>;
var m43 : mat4x3<f32>;
var m33 : mat3x3<f32>;
var m44 : mat4x4<f32>;
m34 = (m34 + m34);
m34 = (m34 - m34);
m33 = (m43 * m34);
m44 = (m34 * m43);
}
[[stage(fragment)]]
fn main() -> [[location(0)]] vec4<f32> {
return vec4<f32>(0.0, 0.0, 0.0, 0.0);