OpArrayLength must trigger active variables.
This commit is contained in:
parent
7b9e0fb428
commit
42e64597a7
@ -17,7 +17,7 @@ struct SSBO1
|
||||
struct SSBO2
|
||||
{
|
||||
uint size2;
|
||||
float w[1];
|
||||
float4 w[1];
|
||||
};
|
||||
|
||||
struct SSBO3
|
||||
@ -37,7 +37,7 @@ struct spvDescriptorSetBuffer1
|
||||
device SSBO1* ssbos [[id(2)]][2];
|
||||
};
|
||||
|
||||
kernel void main0(constant spvDescriptorSetBuffer0& spvDescriptorSet0 [[buffer(0)]], constant spvDescriptorSetBuffer1& spvDescriptorSet1 [[buffer(1)]], constant uint* spvBufferSizeConstants [[buffer(25)]], device SSBO3* ssbos2_0 [[buffer(2)]], device SSBO3* ssbos2_1 [[buffer(3)]])
|
||||
kernel void main0(constant spvDescriptorSetBuffer0& spvDescriptorSet0 [[buffer(0)]], constant spvDescriptorSetBuffer1& spvDescriptorSet1 [[buffer(1)]], constant uint* spvBufferSizeConstants [[buffer(25)]], device SSBO3* ssbos2_0 [[buffer(2)]], device SSBO3* ssbos2_1 [[buffer(3)]], device SSBO2& _38 [[buffer(5)]])
|
||||
{
|
||||
device SSBO3* ssbos2[] =
|
||||
{
|
||||
@ -47,6 +47,7 @@ kernel void main0(constant spvDescriptorSetBuffer0& spvDescriptorSet0 [[buffer(0
|
||||
|
||||
constant uint& spvDescriptorSet0_m_16BufferSize = spvDescriptorSet0.spvBufferSizeConstants[1];
|
||||
constant uint* spvDescriptorSet1_ssbosBufferSize = &spvDescriptorSet1.spvBufferSizeConstants[2];
|
||||
constant uint& _38BufferSize = spvBufferSizeConstants[5];
|
||||
constant uint* ssbos2BufferSize = &spvBufferSizeConstants[2];
|
||||
(*spvDescriptorSet0.m_16).size = ((uint(int((spvDescriptorSet0_m_16BufferSize - 16) / 16)) + uint(int((spvDescriptorSet1_ssbosBufferSize[1] - 0) / 4))) + uint(int((_38BufferSize - 16) / 16))) + uint(int((ssbos2BufferSize[0] - 0) / 4));
|
||||
}
|
||||
|
@ -19,7 +19,7 @@ struct SSBO1
|
||||
struct SSBO2
|
||||
{
|
||||
uint size2;
|
||||
float w[1];
|
||||
float4 w[1];
|
||||
};
|
||||
|
||||
struct SSBO3
|
||||
@ -48,7 +48,7 @@ uint get_size(device SSBO& v_16, constant uint& v_16BufferSize, device SSBO1* co
|
||||
return len;
|
||||
}
|
||||
|
||||
kernel void main0(constant spvDescriptorSetBuffer0& spvDescriptorSet0 [[buffer(0)]], constant spvDescriptorSetBuffer1& spvDescriptorSet1 [[buffer(1)]], constant uint* spvBufferSizeConstants [[buffer(25)]], device SSBO3* ssbos2_0 [[buffer(2)]], device SSBO3* ssbos2_1 [[buffer(3)]])
|
||||
kernel void main0(constant spvDescriptorSetBuffer0& spvDescriptorSet0 [[buffer(0)]], constant spvDescriptorSetBuffer1& spvDescriptorSet1 [[buffer(1)]], constant uint* spvBufferSizeConstants [[buffer(25)]], device SSBO3* ssbos2_0 [[buffer(2)]], device SSBO3* ssbos2_1 [[buffer(3)]], device SSBO2& v_38 [[buffer(5)]])
|
||||
{
|
||||
device SSBO3* ssbos2[] =
|
||||
{
|
||||
@ -58,6 +58,7 @@ kernel void main0(constant spvDescriptorSetBuffer0& spvDescriptorSet0 [[buffer(0
|
||||
|
||||
constant uint& spvDescriptorSet0_v_16BufferSize = spvDescriptorSet0.spvBufferSizeConstants[1];
|
||||
constant uint* spvDescriptorSet1_ssbosBufferSize = &spvDescriptorSet1.spvBufferSizeConstants[2];
|
||||
constant uint& v_38BufferSize = spvBufferSizeConstants[5];
|
||||
constant uint* ssbos2BufferSize = &spvBufferSizeConstants[2];
|
||||
(*spvDescriptorSet0.v_16).size = get_size((*spvDescriptorSet0.v_16), spvDescriptorSet0_v_16BufferSize, spvDescriptorSet1.ssbos, spvDescriptorSet1_ssbosBufferSize, v_38, v_38BufferSize, ssbos2, ssbos2BufferSize);
|
||||
}
|
||||
|
@ -11,7 +11,7 @@ layout(set = 1, binding = 2, std430) buffer SSBO1
|
||||
float bz[];
|
||||
} ssbos[2];
|
||||
|
||||
layout(set = 2, binding = 1, std140) buffer SSBO2
|
||||
layout(set = 2, binding = 5, std140) buffer SSBO2
|
||||
{
|
||||
uint size2;
|
||||
float w[];
|
||||
|
@ -708,6 +708,7 @@ bool Compiler::InterfaceVariableAccessHandler::handle(Op opcode, const uint32_t
|
||||
case OpAtomicAnd:
|
||||
case OpAtomicOr:
|
||||
case OpAtomicXor:
|
||||
case OpArrayLength:
|
||||
// Invalid SPIR-V.
|
||||
if (length < 3)
|
||||
return false;
|
||||
|
Loading…
Reference in New Issue
Block a user