Test matrix multiplies in more complex scenarios.
This commit is contained in:
Родитель
978253c804
Коммит
0f10601f27
|
@ -0,0 +1,23 @@
|
|||
#include <metal_stdlib>
|
||||
#include <simd/simd.h>
|
||||
|
||||
using namespace metal;
|
||||
|
||||
typedef packed_float3 packed_float3x3[3];
|
||||
|
||||
struct SSBO
|
||||
{
|
||||
packed_float3x3 m0;
|
||||
packed_float3x3 m1;
|
||||
packed_float3 v0;
|
||||
packed_float3 v1;
|
||||
};
|
||||
|
||||
kernel void main0(device SSBO& _11 [[buffer(0)]])
|
||||
{
|
||||
_11.v0 = (float3x3(float3(_11.m0[0]), float3(_11.m0[1]), float3(_11.m0[2])) * float3x3(float3(_11.m1[0]), float3(_11.m1[1]), float3(_11.m1[2]))) * float3(_11.v1);
|
||||
_11.v0 = float3x3(float3(_11.m0[0]), float3(_11.m0[1]), float3(_11.m0[2])) * (float3x3(float3(_11.m1[0]), float3(_11.m1[1]), float3(_11.m1[2])) * float3(_11.v1));
|
||||
_11.v0 = (float3(_11.v1) * float3x3(float3(_11.m0[0]), float3(_11.m0[1]), float3(_11.m0[2]))) * float3x3(float3(_11.m1[0]), float3(_11.m1[1]), float3(_11.m1[2]));
|
||||
_11.v0 = float3(_11.v1) * (float3x3(float3(_11.m0[0]), float3(_11.m0[1]), float3(_11.m0[2])) * float3x3(float3(_11.m1[0]), float3(_11.m1[1]), float3(_11.m1[2])));
|
||||
}
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
#include <metal_stdlib>
|
||||
#include <simd/simd.h>
|
||||
|
||||
using namespace metal;
|
||||
|
||||
struct SSBO
|
||||
{
|
||||
float2x4 m0;
|
||||
float2x4 m1;
|
||||
float2 v0;
|
||||
float2 v1;
|
||||
};
|
||||
|
||||
kernel void main0(device SSBO& _11 [[buffer(0)]])
|
||||
{
|
||||
_11.v0 = (float2x2(_11.m0[0].xy, _11.m0[1].xy) * float2x2(_11.m1[0].xy, _11.m1[1].xy)) * _11.v1;
|
||||
_11.v0 = float2x2(_11.m0[0].xy, _11.m0[1].xy) * (float2x2(_11.m1[0].xy, _11.m1[1].xy) * _11.v1);
|
||||
_11.v0 = (_11.v1 * float2x2(_11.m0[0].xy, _11.m0[1].xy)) * float2x2(_11.m1[0].xy, _11.m1[1].xy);
|
||||
_11.v0 = _11.v1 * (float2x2(_11.m0[0].xy, _11.m0[1].xy) * float2x2(_11.m1[0].xy, _11.m1[1].xy));
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
#include <metal_stdlib>
|
||||
#include <simd/simd.h>
|
||||
|
||||
using namespace metal;
|
||||
|
||||
typedef packed_float3 packed_rm_float3x3[3];
|
||||
|
||||
struct SSBO
|
||||
{
|
||||
packed_rm_float3x3 m0;
|
||||
packed_rm_float3x3 m1;
|
||||
packed_float3 v0;
|
||||
packed_float3 v1;
|
||||
};
|
||||
|
||||
kernel void main0(device SSBO& _11 [[buffer(0)]])
|
||||
{
|
||||
_11.v0 = _11.v1 * (float3x3(float3(_11.m1[0]), float3(_11.m1[1]), float3(_11.m1[2])) * float3x3(float3(_11.m0[0]), float3(_11.m0[1]), float3(_11.m0[2])));
|
||||
_11.v0 = (_11.v1 * float3x3(float3(_11.m1[0]), float3(_11.m1[1]), float3(_11.m1[2]))) * float3x3(float3(_11.m0[0]), float3(_11.m0[1]), float3(_11.m0[2]));
|
||||
_11.v0 = float3x3(float3(_11.m1[0]), float3(_11.m1[1]), float3(_11.m1[2])) * (float3x3(float3(_11.m0[0]), float3(_11.m0[1]), float3(_11.m0[2])) * _11.v1);
|
||||
_11.v0 = (float3x3(float3(_11.m1[0]), float3(_11.m1[1]), float3(_11.m1[2])) * float3x3(float3(_11.m0[0]), float3(_11.m0[1]), float3(_11.m0[2]))) * _11.v1;
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
#version 450
|
||||
#extension GL_EXT_scalar_block_layout : require
|
||||
layout(local_size_x = 1) in;
|
||||
|
||||
layout(scalar, set = 0, binding = 0) buffer SSBO
|
||||
{
|
||||
mat3 m0;
|
||||
mat3 m1;
|
||||
vec3 v0;
|
||||
vec3 v1;
|
||||
};
|
||||
|
||||
void main()
|
||||
{
|
||||
v0 = (m0 * m1) * v1;
|
||||
v0 = m0 * (m1 * v1);
|
||||
v0 = (v1 * m0) * m1;
|
||||
v0 = v1 * (m0 * m1);
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
#version 450
|
||||
layout(local_size_x = 1) in;
|
||||
|
||||
layout(std140, set = 0, binding = 0) buffer SSBO
|
||||
{
|
||||
mat2 m0;
|
||||
mat2 m1;
|
||||
vec2 v0;
|
||||
vec2 v1;
|
||||
};
|
||||
|
||||
void main()
|
||||
{
|
||||
v0 = (m0 * m1) * v1;
|
||||
v0 = m0 * (m1 * v1);
|
||||
v0 = (v1 * m0) * m1;
|
||||
v0 = v1 * (m0 * m1);
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
#version 450
|
||||
#extension GL_EXT_scalar_block_layout : require
|
||||
layout(local_size_x = 1) in;
|
||||
|
||||
layout(scalar, row_major, set = 0, binding = 0) buffer SSBO
|
||||
{
|
||||
mat3 m0;
|
||||
mat3 m1;
|
||||
vec3 v0;
|
||||
vec3 v1;
|
||||
};
|
||||
|
||||
void main()
|
||||
{
|
||||
v0 = (m0 * m1) * v1;
|
||||
v0 = m0 * (m1 * v1);
|
||||
v0 = (v1 * m0) * m1;
|
||||
v0 = v1 * (m0 * m1);
|
||||
}
|
Загрузка…
Ссылка в новой задаче