Fix unpacking of packed but not remapped types on load.
This commit is contained in:
parent
b66a53a979
commit
6c1f97b4a9
@ -16,7 +16,7 @@ kernel void main0(device foo& _8 [[buffer(0)]], uint3 gl_LocalInvocationID [[thr
|
||||
{
|
||||
_8.bar = gl_LocalInvocationID.x;
|
||||
_8.baz = float3(gl_GlobalInvocationID);
|
||||
_8.blah = uchar4(uint4(uint4(_8.blah).xyz + gl_WorkGroupID, 0u));
|
||||
_8.wibble = half2(float2(_8.wibble) * float2(gl_NumWorkGroups.xy));
|
||||
_8.blah = uchar4(uint4(uint4(uchar4(_8.blah)).xyz + gl_WorkGroupID, 0u));
|
||||
_8.wibble = half2(float2(half2(_8.wibble)) * float2(gl_NumWorkGroups.xy));
|
||||
}
|
||||
|
||||
|
@ -33,7 +33,7 @@ vertex main0_out main0(main0_in in [[stage_in]], constant UBO& _18 [[buffer(0)]]
|
||||
main0_out out = {};
|
||||
out.gl_Position = _18.uMVP * in.aVertex;
|
||||
out.vColor = float4(0.0);
|
||||
float3 L = in.aVertex.xyz - _18.light.Position;
|
||||
float3 L = in.aVertex.xyz - float3(_18.light.Position);
|
||||
out.vColor += ((_18.light.Color * fast::clamp(1.0 - (length(L) / _18.light.Radius), 0.0, 1.0)) * dot(in.aNormal, normalize(L)));
|
||||
return out;
|
||||
}
|
||||
|
@ -43,7 +43,7 @@ vertex main0_out main0(main0_in in [[stage_in]], constant UBO& _21 [[buffer(0)]]
|
||||
Light_1 light;
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
light.Position = _21.lights[i].Position;
|
||||
light.Position = float3(_21.lights[i].Position);
|
||||
light.Radius = _21.lights[i].Radius;
|
||||
light.Color = _21.lights[i].Color;
|
||||
float3 L = in.aVertex.xyz - light.Position;
|
||||
|
@ -35,7 +35,7 @@ vertex main0_out main0(main0_in in [[stage_in]], constant UBO& _21 [[buffer(0)]]
|
||||
out.vColor = float4(0.0);
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
float3 L = in.aVertex.xyz - _21.lights[i].Position;
|
||||
float3 L = in.aVertex.xyz - float3(_21.lights[i].Position);
|
||||
out.vColor += ((_21.lights[i].Color * fast::clamp(1.0 - (length(L) / _21.lights[i].Radius), 0.0, 1.0)) * dot(in.aNormal, normalize(L)));
|
||||
}
|
||||
return out;
|
||||
|
@ -45,7 +45,7 @@ vertex main0_out main0(main0_in in [[stage_in]], constant _15& _17 [[buffer(0)]]
|
||||
_13 = normalize(transpose(_17._m1) * float4(in.m_25.xyz, 0.0));
|
||||
break;
|
||||
} while (false);
|
||||
float4 _39 = _44._m0 * float4(_44._m3 + (in.m_25.xyz * (_44._m6 + _44._m7)), 1.0);
|
||||
float4 _39 = _44._m0 * float4(float3(_44._m3) + (in.m_25.xyz * (_44._m6 + _44._m7)), 1.0);
|
||||
out.m_72 = _13;
|
||||
float4 _74 = _39;
|
||||
_74.y = -_39.y;
|
||||
|
@ -31,7 +31,7 @@ vertex main0_out main0(main0_in in [[stage_in]], constant UBO& _18 [[buffer(0)]]
|
||||
main0_out out = {};
|
||||
out.gl_Position = _18.mvp * in.aVertex;
|
||||
out.vNormal = in.aNormal;
|
||||
out.vColor = _18.color * _18.opacity;
|
||||
out.vColor = float3(_18.color) * _18.opacity;
|
||||
out.vSize = _18.targSize * _18.opacity;
|
||||
return out;
|
||||
}
|
||||
|
@ -122,21 +122,21 @@ kernel void main0(device SSBO1& ssbo_scalar [[buffer(0)]], device SSBO0& ssbo_14
|
||||
{
|
||||
ssbo_scalar.content.m0s[0].a[0] = ssbo_140.content.m0s[0].a[0].xy;
|
||||
ssbo_scalar.content.m0s[0].b = ssbo_140.content.m0s[0].b;
|
||||
ssbo_scalar.content.m1s[0].a = ssbo_140.content.m1s[0].a;
|
||||
ssbo_scalar.content.m1s[0].a = float3(ssbo_140.content.m1s[0].a);
|
||||
ssbo_scalar.content.m1s[0].b = ssbo_140.content.m1s[0].b;
|
||||
ssbo_scalar.content.m2s[0].a[0] = ssbo_140.content.m2s[0].a[0];
|
||||
ssbo_scalar.content.m2s[0].b = ssbo_140.content.m2s[0].b;
|
||||
ssbo_scalar.content.m0.a[0] = ssbo_140.content.m0.a[0].xy;
|
||||
ssbo_scalar.content.m0.b = ssbo_140.content.m0.b;
|
||||
ssbo_scalar.content.m1.a = ssbo_140.content.m1.a;
|
||||
ssbo_scalar.content.m1.a = float3(ssbo_140.content.m1.a);
|
||||
ssbo_scalar.content.m1.b = ssbo_140.content.m1.b;
|
||||
ssbo_scalar.content.m2.a[0] = ssbo_140.content.m2.a[0];
|
||||
ssbo_scalar.content.m2.b = ssbo_140.content.m2.b;
|
||||
ssbo_scalar.content.m3.a = ssbo_140.content.m3.a;
|
||||
ssbo_scalar.content.m3.b = ssbo_140.content.m3.b;
|
||||
ssbo_scalar.content.m4 = ssbo_140.content.m4;
|
||||
ssbo_scalar.content.m1.a = ssbo_scalar.m2[1] * ssbo_scalar.content.m0.a[0];
|
||||
ssbo_scalar.m0 = ssbo_scalar2.m1;
|
||||
ssbo_scalar.content.m1.a = float2x3(float3(ssbo_scalar.m2[1][0]), float3(ssbo_scalar.m2[1][1])) * float2(ssbo_scalar.content.m0.a[0]);
|
||||
ssbo_scalar.m0 = float2x2(float2(ssbo_scalar2.m1[0]), float2(ssbo_scalar2.m1[1]));
|
||||
ssbo_scalar2.m1[0] = float2(ssbo_scalar.m4[0][0], ssbo_scalar.m4[1][0]));
|
||||
ssbo_scalar2.m1[1] = float2(ssbo_scalar.m4[0][1], ssbo_scalar.m4[1][1]));
|
||||
ssbo_scalar2.m2[0] = float3(ssbo_scalar.m3[0][0], ssbo_scalar.m3[1][0], ssbo_scalar.m3[2][0]));
|
||||
|
@ -2840,7 +2840,9 @@ string CompilerGLSL::to_unpacked_expression(uint32_t id, bool register_expressio
|
||||
// If we need to transpose, it will also take care of unpacking rules.
|
||||
auto *e = maybe_get<SPIRExpression>(id);
|
||||
bool need_transpose = e && e->need_transpose;
|
||||
if (!need_transpose && has_extended_decoration(id, SPIRVCrossDecorationPhysicalTypeID))
|
||||
bool is_remapped = has_extended_decoration(id, SPIRVCrossDecorationPhysicalTypeID);
|
||||
bool is_packed = has_extended_decoration(id, SPIRVCrossDecorationPhysicalTypePacked);
|
||||
if (!need_transpose && (is_remapped || is_packed))
|
||||
{
|
||||
return unpack_expression_type(to_expression(id, register_expression_read), expression_type(id),
|
||||
get_extended_decoration(id, SPIRVCrossDecorationPhysicalTypeID),
|
||||
@ -2855,7 +2857,9 @@ string CompilerGLSL::to_enclosed_unpacked_expression(uint32_t id, bool register_
|
||||
// If we need to transpose, it will also take care of unpacking rules.
|
||||
auto *e = maybe_get<SPIRExpression>(id);
|
||||
bool need_transpose = e && e->need_transpose;
|
||||
if (!need_transpose && has_extended_decoration(id, SPIRVCrossDecorationPhysicalTypeID))
|
||||
bool is_remapped = has_extended_decoration(id, SPIRVCrossDecorationPhysicalTypeID);
|
||||
bool is_packed = has_extended_decoration(id, SPIRVCrossDecorationPhysicalTypePacked);
|
||||
if (!need_transpose && (is_remapped || is_packed))
|
||||
{
|
||||
return unpack_expression_type(to_expression(id, register_expression_read), expression_type(id),
|
||||
get_extended_decoration(id, SPIRVCrossDecorationPhysicalTypeID),
|
||||
|
Loading…
Reference in New Issue
Block a user