Skip to content

Shader parsing error when switching to multiple buffers (Vulkan) #202

@sanblu

Description

@sanblu

First off, thanks a lot for this great library, I use it for image processing and could not do without it.

Now to my issue: My input buffer was becoming too big (>4gb) for Vulkan so I tried switching to passing multiple smaller input buffers instead.

The code before the adaption worked without issues, with the adapted code I'm now getting a VKFFT_ERROR_FAILED_SHADER_PARSE (4014) error and I don't quite understand if this is a bug or if there is some misconfiguration on my end.

The error in the shader seems to be caused by the use of 'outputBlocks' which has not been defined (full shader output below).
Also the error seems to occur only when the size of the individual buffers crosses a certain size (the error occured in a scenario where each buffer was about 250mb, in another scenario where each buffer was just roughly 64mb the parse error did not occur).
I have inserted the relevant code below. If you have any hint or feedback at what might go wrong that would be greatly appreciated.

In my code the app is initialized as follows:

        VkFence dftFence;
        CALL_VK(vkCreateFence, mDevice, &fenceCreateInfo, nullptr, &dftFence);
        mDftFence = dftFence;

        VkBuffer dftBuffers[] = {
            mFftTempBuffers[0]->getBufferHandle(),
            mFftTempBuffers[1]->getBufferHandle()
        };
        uint64_t dftBufferSizes[] = {
            mFftTempBuffers[0]->getSize(),
            mFftTempBuffers[1]->getSize()
        };

        VkFFTConfiguration configuration = {};
        configuration.FFTdim = 2;
        configuration.size[0] = mContext->getRenderWidth();
        configuration.size[1] = mContext->getRenderHeight();
        configuration.device = &mDevice;
        configuration.queue = &mQueue;
        configuration.commandPool = &mCommandPool;
        configuration.fence = &mDftFence;
        configuration.physicalDevice = &mPhysicalDevice;
        configuration.bufferNum = 2;
        configuration.buffer = dftBuffers;
        configuration.bufferSize = dftBufferSizes;

        result = initializeVkFFT(&mVkFFTDftApplication, configuration);
        if (result != VKFFT_SUCCESS)
        {
            LOGE("initializeVkFFT (fft) failed with errorCode=%u", result)
            return false;
        }

In my code the append looks like this:

VkCommandBuffer commandBuffer = mCommandBuffer->handle();
                VkFFTLaunchParams launchParams = {};
                launchParams.commandBuffer = &commandBuffer;

                {
                    TimeElapsedLogger timeElapsedLogger("process - VkFFTAppend");
                    VkFFTResult result = VkFFTAppend(&mVkFFTDftApplication, inverse, &launchParams);
                    if (result != VKFFT_SUCCESS)
                    {
                        LOGE("VkFFTAppend failed with errorCode=%u", result)
                    }
                }

Full shader error output:

#version 450

layout (local_size_x = 16, local_size_y = 16, local_size_z = 1) in;
layout(std430, binding = 0) buffer DataIn{
        vec2 inputs[67108864];
};

layout(std430, binding = 1) buffer DataOut{
        vec2 outputs[33554432];
};

shared vec2 sdata[2048];

void main() {
vec2 temp_0;
temp_0.x = 0.0f;
temp_0.y = 0.0f;
vec2 temp_1;
temp_1.x = 0.0f;
temp_1.y = 0.0f;
vec2 temp_2;
temp_2.x = 0.0f;
temp_2.y = 0.0f;
vec2 temp_3;
temp_3.x = 0.0f;
temp_3.y = 0.0f;
vec2 temp_4;
temp_4.x = 0.0f;
temp_4.y = 0.0f;
vec2 temp_5;
temp_5.x = 0.0f;
temp_5.y = 0.0f;
vec2 temp_6;
temp_6.x = 0.0f;
temp_6.y = 0.0f;
vec2 temp_7;
temp_7.x = 0.0f;
temp_7.y = 0.0f;
vec2 w;
w.x = 0.0f;
w.y = 0.0f;
vec2 loc_0;
loc_0.x = 0.0f;
loc_0.y = 0.0f;
uint tempInt;
tempInt = 0;
uint tempInt2;
tempInt2 = 0;
uint shiftX;
shiftX = 0;
uint shiftY;
shiftY = 0;
uint shiftZ;
shiftZ = 0;
vec2 iw;
iw.x = 0.0f;
iw.y = 0.0f;
uint stageInvocationID;
stageInvocationID = 0;
uint blockInvocationID;
blockInvocationID = 0;
uint sdataID;
sdataID = 0;
uint combinedID;
combinedID = 0;
uint inoutID;
inoutID = 0;
uint inoutID_x;
inoutID_x = 0;
uint inoutID_y;
inoutID_y = 0;
uint disableThreads;
disableThreads = 1;
float angle;
angle = 0.0f;
shiftX = gl_GlobalInvocationID.x;
shiftZ = 0;
shiftZ = shiftZ + 0;
inoutID_x = shiftX % 8192;
tempInt2 = shiftX / 8192;
tempInt2 = tempInt2 % 1;
tempInt = shiftX / 8192;
tempInt = tempInt * 128;
tempInt2 = tempInt2 + tempInt;
if (tempInt2 < 8192) {
inoutID_y = gl_LocalInvocationID.y * 1;
inoutID_y = inoutID_y + tempInt2;
inoutID = inoutID_x;
tempInt = inoutID_y * 8192;
inoutID = inoutID + tempInt;
inoutID = inoutID + shiftZ;
temp_0 = inputs[inoutID];
inoutID = inoutID + 131072;
temp_1 = inputs[inoutID];
inoutID = inoutID + 131072;
temp_2 = inputs[inoutID];
inoutID = inoutID + 131072;
temp_3 = inputs[inoutID];
inoutID = inoutID + 131072;
temp_4 = inputs[inoutID];
inoutID = inoutID + 131072;
temp_5 = inputs[inoutID];
inoutID = inoutID + 131072;
temp_6 = inputs[inoutID];
inoutID = inoutID + 131072;
temp_7 = inputs[inoutID];
}
stageInvocationID = gl_LocalInvocationID.y + 0;
stageInvocationID = stageInvocationID % 1;
angle = stageInvocationID * 3.14159265358979312e+00f;
w.x = 1.00000000000000000e+00f;
w.y = 0.00000000000000000e+00f;
loc_0.x = temp_4.y * w.y;
loc_0.x = -loc_0.x;
loc_0.x = fma(temp_4.x, w.x, loc_0.x);
loc_0.y = temp_4.y * w.x;
loc_0.y = fma(temp_4.x, w.y, loc_0.y);
temp_4.x = temp_0.x - loc_0.x;
temp_4.y = temp_0.y - loc_0.y;
temp_0.x = temp_0.x + loc_0.x;
temp_0.y = temp_0.y + loc_0.y;
loc_0.x = temp_5.y * w.y;
loc_0.x = -loc_0.x;
loc_0.x = fma(temp_5.x, w.x, loc_0.x);
loc_0.y = temp_5.y * w.x;
loc_0.y = fma(temp_5.x, w.y, loc_0.y);
temp_5.x = temp_1.x - loc_0.x;
temp_5.y = temp_1.y - loc_0.y;
temp_1.x = temp_1.x + loc_0.x;
temp_1.y = temp_1.y + loc_0.y;
loc_0.x = temp_6.y * w.y;
loc_0.x = -loc_0.x;
loc_0.x = fma(temp_6.x, w.x, loc_0.x);
loc_0.y = temp_6.y * w.x;
loc_0.y = fma(temp_6.x, w.y, loc_0.y);
temp_6.x = temp_2.x - loc_0.x;
temp_6.y = temp_2.y - loc_0.y;
temp_2.x = temp_2.x + loc_0.x;
temp_2.y = temp_2.y + loc_0.y;
loc_0.x = temp_7.y * w.y;
loc_0.x = -loc_0.x;
loc_0.x = fma(temp_7.x, w.x, loc_0.x);
loc_0.y = temp_7.y * w.x;
loc_0.y = fma(temp_7.x, w.y, loc_0.y);
temp_7.x = temp_3.x - loc_0.x;
temp_7.y = temp_3.y - loc_0.y;
temp_3.x = temp_3.x + loc_0.x;
temp_3.y = temp_3.y + loc_0.y;
w.x = 1.00000000000000000e+00f;
w.y = 0.00000000000000000e+00f;
loc_0.x = temp_2.y * w.y;
loc_0.x = -loc_0.x;
loc_0.x = fma(temp_2.x, w.x, loc_0.x);
loc_0.y = temp_2.y * w.x;
loc_0.y = fma(temp_2.x, w.y, loc_0.y);
temp_2.x = temp_0.x - loc_0.x;
temp_2.y = temp_0.y - loc_0.y;
temp_0.x = temp_0.x + loc_0.x;
temp_0.y = temp_0.y + loc_0.y;
loc_0.x = temp_3.y * w.y;
loc_0.x = -loc_0.x;
loc_0.x = fma(temp_3.x, w.x, loc_0.x);
loc_0.y = temp_3.y * w.x;
loc_0.y = fma(temp_3.x, w.y, loc_0.y);
temp_3.x = temp_1.x - loc_0.x;
temp_3.y = temp_1.y - loc_0.y;
temp_1.x = temp_1.x + loc_0.x;
temp_1.y = temp_1.y + loc_0.y;
iw.x = -w.y;
iw.y = w.x;
loc_0.x = temp_6.y * iw.y;
loc_0.x = -loc_0.x;
loc_0.x = fma(temp_6.x, iw.x, loc_0.x);
loc_0.y = temp_6.y * iw.x;
loc_0.y = fma(temp_6.x, iw.y, loc_0.y);
temp_6.x = temp_4.x - loc_0.x;
temp_6.y = temp_4.y - loc_0.y;
temp_4.x = temp_4.x + loc_0.x;
temp_4.y = temp_4.y + loc_0.y;
loc_0.x = temp_7.y * iw.y;
loc_0.x = -loc_0.x;
loc_0.x = fma(temp_7.x, iw.x, loc_0.x);
loc_0.y = temp_7.y * iw.x;
loc_0.y = fma(temp_7.x, iw.y, loc_0.y);
temp_7.x = temp_5.x - loc_0.x;
temp_7.y = temp_5.y - loc_0.y;
temp_5.x = temp_5.x + loc_0.x;
temp_5.y = temp_5.y + loc_0.y;
w.x = 1.00000000000000000e+00f;
w.y = 0.00000000000000000e+00f;
loc_0.x = temp_1.y * w.y;
loc_0.x = -loc_0.x;
loc_0.x = fma(temp_1.x, w.x, loc_0.x);
loc_0.y = temp_1.y * w.x;
loc_0.y = fma(temp_1.x, w.y, loc_0.y);
temp_1.x = temp_0.x - loc_0.x;
temp_1.y = temp_0.y - loc_0.y;
temp_0.x = temp_0.x + loc_0.x;
temp_0.y = temp_0.y + loc_0.y;
iw.x = -w.y;
iw.y = w.x;
loc_0.x = temp_3.y * iw.y;
loc_0.x = -loc_0.x;
loc_0.x = fma(temp_3.x, iw.x, loc_0.x);
loc_0.y = temp_3.y * iw.x;
loc_0.y = fma(temp_3.x, iw.y, loc_0.y);
temp_3.x = temp_2.x - loc_0.x;
temp_3.y = temp_2.y - loc_0.y;
temp_2.x = temp_2.x + loc_0.x;
temp_2.y = temp_2.y + loc_0.y;
iw.x = w.y * 7.07106781186547573e-01f;
iw.x = -iw.x;
iw.x = fma(w.x, 7.07106781186547573e-01f, iw.x);
iw.y = w.y * 7.07106781186547573e-01f;
iw.y = fma(w.x, 7.07106781186547573e-01f, iw.y);
loc_0.x = temp_5.y * iw.y;
loc_0.x = -loc_0.x;
loc_0.x = fma(temp_5.x, iw.x, loc_0.x);
loc_0.y = temp_5.y * iw.x;
loc_0.y = fma(temp_5.x, iw.y, loc_0.y);
temp_5.x = temp_4.x - loc_0.x;
temp_5.y = temp_4.y - loc_0.y;
temp_4.x = temp_4.x + loc_0.x;
temp_4.y = temp_4.y + loc_0.y;
w.x = -iw.y;
w.y = iw.x;
loc_0.x = temp_7.y * w.y;
loc_0.x = -loc_0.x;
loc_0.x = fma(temp_7.x, w.x, loc_0.x);
loc_0.y = temp_7.y * w.x;
loc_0.y = fma(temp_7.x, w.y, loc_0.y);
temp_7.x = temp_6.x - loc_0.x;
temp_7.y = temp_6.y - loc_0.y;
temp_6.x = temp_6.x + loc_0.x;
temp_6.y = temp_6.y + loc_0.y;
barrier();

stageInvocationID = gl_LocalInvocationID.y + 0;
blockInvocationID = stageInvocationID;
stageInvocationID = stageInvocationID % 1;
blockInvocationID = blockInvocationID - stageInvocationID;
inoutID = blockInvocationID * 8;
inoutID = inoutID + stageInvocationID;
sdataID = inoutID + 0;
sdataID = sdataID * 16;
sdataID = sdataID + gl_LocalInvocationID.x;
sdata[sdataID] = temp_0;
sdataID = inoutID + 1;
sdataID = sdataID * 16;
sdataID = sdataID + gl_LocalInvocationID.x;
sdata[sdataID] = temp_4;
sdataID = inoutID + 2;
sdataID = sdataID * 16;
sdataID = sdataID + gl_LocalInvocationID.x;
sdata[sdataID] = temp_2;
sdataID = inoutID + 3;
sdataID = sdataID * 16;
sdataID = sdataID + gl_LocalInvocationID.x;
sdata[sdataID] = temp_6;
sdataID = inoutID + 4;
sdataID = sdataID * 16;
sdataID = sdataID + gl_LocalInvocationID.x;
sdata[sdataID] = temp_1;
sdataID = inoutID + 5;
sdataID = sdataID * 16;
sdataID = sdataID + gl_LocalInvocationID.x;
sdata[sdataID] = temp_5;
sdataID = inoutID + 6;
sdataID = sdataID * 16;
sdataID = sdataID + gl_LocalInvocationID.x;
sdata[sdataID] = temp_3;
sdataID = inoutID + 7;
sdataID = sdataID * 16;
sdataID = sdataID + gl_LocalInvocationID.x;
sdata[sdataID] = temp_7;
barrier();

stageInvocationID = gl_LocalInvocationID.y + 0;
stageInvocationID = stageInvocationID % 8;
angle = stageInvocationID * 3.92699081698724139e-01f;
sdataID = gl_LocalInvocationID.y + 0;
sdataID = sdataID * 16;
sdataID = sdataID + gl_LocalInvocationID.x;
temp_0 = sdata[sdataID];
sdataID = gl_LocalInvocationID.y + 16;
sdataID = sdataID * 16;
sdataID = sdataID + gl_LocalInvocationID.x;
temp_4 = sdata[sdataID];
sdataID = gl_LocalInvocationID.y + 32;
sdataID = sdataID * 16;
sdataID = sdataID + gl_LocalInvocationID.x;
temp_2 = sdata[sdataID];
sdataID = gl_LocalInvocationID.y + 48;
sdataID = sdataID * 16;
sdataID = sdataID + gl_LocalInvocationID.x;
temp_6 = sdata[sdataID];
sdataID = gl_LocalInvocationID.y + 64;
sdataID = sdataID * 16;
sdataID = sdataID + gl_LocalInvocationID.x;
temp_1 = sdata[sdataID];
sdataID = gl_LocalInvocationID.y + 80;
sdataID = sdataID * 16;
sdataID = sdataID + gl_LocalInvocationID.x;
temp_5 = sdata[sdataID];
sdataID = gl_LocalInvocationID.y + 96;
sdataID = sdataID * 16;
sdataID = sdataID + gl_LocalInvocationID.x;
temp_3 = sdata[sdataID];
sdataID = gl_LocalInvocationID.y + 112;
sdataID = sdataID * 16;
sdataID = sdataID + gl_LocalInvocationID.x;
temp_7 = sdata[sdataID];
w.x = cos(angle);
w.y = sin(angle);
loc_0.x = temp_1.y * w.y;
loc_0.x = -loc_0.x;
loc_0.x = fma(temp_1.x, w.x, loc_0.x);
loc_0.y = temp_1.y * w.x;
loc_0.y = fma(temp_1.x, w.y, loc_0.y);
temp_1.x = temp_0.x - loc_0.x;
temp_1.y = temp_0.y - loc_0.y;
temp_0.x = temp_0.x + loc_0.x;
temp_0.y = temp_0.y + loc_0.y;
loc_0.x = temp_5.y * w.y;
loc_0.x = -loc_0.x;
loc_0.x = fma(temp_5.x, w.x, loc_0.x);
loc_0.y = temp_5.y * w.x;
loc_0.y = fma(temp_5.x, w.y, loc_0.y);
temp_5.x = temp_4.x - loc_0.x;
temp_5.y = temp_4.y - loc_0.y;
temp_4.x = temp_4.x + loc_0.x;
temp_4.y = temp_4.y + loc_0.y;
loc_0.x = temp_3.y * w.y;
loc_0.x = -loc_0.x;
loc_0.x = fma(temp_3.x, w.x, loc_0.x);
loc_0.y = temp_3.y * w.x;
loc_0.y = fma(temp_3.x, w.y, loc_0.y);
temp_3.x = temp_2.x - loc_0.x;
temp_3.y = temp_2.y - loc_0.y;
temp_2.x = temp_2.x + loc_0.x;
temp_2.y = temp_2.y + loc_0.y;
loc_0.x = temp_7.y * w.y;
loc_0.x = -loc_0.x;
loc_0.x = fma(temp_7.x, w.x, loc_0.x);
loc_0.y = temp_7.y * w.x;
loc_0.y = fma(temp_7.x, w.y, loc_0.y);
temp_7.x = temp_6.x - loc_0.x;
temp_7.y = temp_6.y - loc_0.y;
temp_6.x = temp_6.x + loc_0.x;
temp_6.y = temp_6.y + loc_0.y;
loc_0.x = angle * 5.00000000000000000e-01f;
w.x = cos(loc_0.x);
w.y = sin(loc_0.x);
loc_0.x = temp_2.y * w.y;
loc_0.x = -loc_0.x;
loc_0.x = fma(temp_2.x, w.x, loc_0.x);
loc_0.y = temp_2.y * w.x;
loc_0.y = fma(temp_2.x, w.y, loc_0.y);
temp_2.x = temp_0.x - loc_0.x;
temp_2.y = temp_0.y - loc_0.y;
temp_0.x = temp_0.x + loc_0.x;
temp_0.y = temp_0.y + loc_0.y;
loc_0.x = temp_6.y * w.y;
loc_0.x = -loc_0.x;
loc_0.x = fma(temp_6.x, w.x, loc_0.x);
loc_0.y = temp_6.y * w.x;
loc_0.y = fma(temp_6.x, w.y, loc_0.y);
temp_6.x = temp_4.x - loc_0.x;
temp_6.y = temp_4.y - loc_0.y;
temp_4.x = temp_4.x + loc_0.x;
temp_4.y = temp_4.y + loc_0.y;
iw.x = -w.y;
iw.y = w.x;
loc_0.x = temp_3.y * iw.y;
loc_0.x = -loc_0.x;
loc_0.x = fma(temp_3.x, iw.x, loc_0.x);
loc_0.y = temp_3.y * iw.x;
loc_0.y = fma(temp_3.x, iw.y, loc_0.y);
temp_3.x = temp_1.x - loc_0.x;
temp_3.y = temp_1.y - loc_0.y;
temp_1.x = temp_1.x + loc_0.x;
temp_1.y = temp_1.y + loc_0.y;
loc_0.x = temp_7.y * iw.y;
loc_0.x = -loc_0.x;
loc_0.x = fma(temp_7.x, iw.x, loc_0.x);
loc_0.y = temp_7.y * iw.x;
loc_0.y = fma(temp_7.x, iw.y, loc_0.y);
temp_7.x = temp_5.x - loc_0.x;
temp_7.y = temp_5.y - loc_0.y;
temp_5.x = temp_5.x + loc_0.x;
temp_5.y = temp_5.y + loc_0.y;
loc_0.x = angle * 2.50000000000000000e-01f;
w.x = cos(loc_0.x);
w.y = sin(loc_0.x);
loc_0.x = temp_4.y * w.y;
loc_0.x = -loc_0.x;
loc_0.x = fma(temp_4.x, w.x, loc_0.x);
loc_0.y = temp_4.y * w.x;
loc_0.y = fma(temp_4.x, w.y, loc_0.y);
temp_4.x = temp_0.x - loc_0.x;
temp_4.y = temp_0.y - loc_0.y;
temp_0.x = temp_0.x + loc_0.x;
temp_0.y = temp_0.y + loc_0.y;
iw.x = -w.y;
iw.y = w.x;
loc_0.x = temp_6.y * iw.y;
loc_0.x = -loc_0.x;
loc_0.x = fma(temp_6.x, iw.x, loc_0.x);
loc_0.y = temp_6.y * iw.x;
loc_0.y = fma(temp_6.x, iw.y, loc_0.y);
temp_6.x = temp_2.x - loc_0.x;
temp_6.y = temp_2.y - loc_0.y;
temp_2.x = temp_2.x + loc_0.x;
temp_2.y = temp_2.y + loc_0.y;
iw.x = w.y * 7.07106781186547573e-01f;
iw.x = -iw.x;
iw.x = fma(w.x, 7.07106781186547573e-01f, iw.x);
iw.y = w.y * 7.07106781186547573e-01f;
iw.y = fma(w.x, 7.07106781186547573e-01f, iw.y);
loc_0.x = temp_5.y * iw.y;
loc_0.x = -loc_0.x;
loc_0.x = fma(temp_5.x, iw.x, loc_0.x);
loc_0.y = temp_5.y * iw.x;
loc_0.y = fma(temp_5.x, iw.y, loc_0.y);
temp_5.x = temp_1.x - loc_0.x;
temp_5.y = temp_1.y - loc_0.y;
temp_1.x = temp_1.x + loc_0.x;
temp_1.y = temp_1.y + loc_0.y;
w.x = -iw.y;
w.y = iw.x;
loc_0.x = temp_7.y * w.y;
loc_0.x = -loc_0.x;
loc_0.x = fma(temp_7.x, w.x, loc_0.x);
loc_0.y = temp_7.y * w.x;
loc_0.y = fma(temp_7.x, w.y, loc_0.y);
temp_7.x = temp_3.x - loc_0.x;
temp_7.y = temp_3.y - loc_0.y;
temp_3.x = temp_3.x + loc_0.x;
temp_3.y = temp_3.y + loc_0.y;
barrier();

stageInvocationID = gl_LocalInvocationID.y + 0;
blockInvocationID = stageInvocationID;
stageInvocationID = stageInvocationID % 8;
blockInvocationID = blockInvocationID - stageInvocationID;
inoutID = blockInvocationID * 8;
inoutID = inoutID + stageInvocationID;
sdataID = inoutID + 0;
sdataID = sdataID * 16;
sdataID = sdataID + gl_LocalInvocationID.x;
sdata[sdataID] = temp_0;
sdataID = inoutID + 8;
sdataID = sdataID * 16;
sdataID = sdataID + gl_LocalInvocationID.x;
sdata[sdataID] = temp_1;
sdataID = inoutID + 16;
sdataID = sdataID * 16;
sdataID = sdataID + gl_LocalInvocationID.x;
sdata[sdataID] = temp_2;
sdataID = inoutID + 24;
sdataID = sdataID * 16;
sdataID = sdataID + gl_LocalInvocationID.x;
sdata[sdataID] = temp_3;
sdataID = inoutID + 32;
sdataID = sdataID * 16;
sdataID = sdataID + gl_LocalInvocationID.x;
sdata[sdataID] = temp_4;
sdataID = inoutID + 40;
sdataID = sdataID * 16;
sdataID = sdataID + gl_LocalInvocationID.x;
sdata[sdataID] = temp_5;
sdataID = inoutID + 48;
sdataID = sdataID * 16;
sdataID = sdataID + gl_LocalInvocationID.x;
sdata[sdataID] = temp_6;
sdataID = inoutID + 56;
sdataID = sdataID * 16;
sdataID = sdataID + gl_LocalInvocationID.x;
sdata[sdataID] = temp_7;
barrier();

stageInvocationID = gl_LocalInvocationID.y + 0;
stageInvocationID = stageInvocationID % 64;
angle = stageInvocationID * 4.90873852123405174e-02f;
sdataID = gl_LocalInvocationID.y + 0;
sdataID = sdataID * 16;
sdataID = sdataID + gl_LocalInvocationID.x;
temp_0 = sdata[sdataID];
sdataID = gl_LocalInvocationID.y + 64;
sdataID = sdataID * 16;
sdataID = sdataID + gl_LocalInvocationID.x;
temp_4 = sdata[sdataID];
w.x = cos(angle);
w.y = sin(angle);
loc_0.x = temp_4.y * w.y;
loc_0.x = -loc_0.x;
loc_0.x = fma(temp_4.x, w.x, loc_0.x);
loc_0.y = temp_4.y * w.x;
loc_0.y = fma(temp_4.x, w.y, loc_0.y);
temp_4.x = temp_0.x - loc_0.x;
temp_4.y = temp_0.y - loc_0.y;
temp_0.x = temp_0.x + loc_0.x;
temp_0.y = temp_0.y + loc_0.y;
stageInvocationID = gl_LocalInvocationID.y + 16;
stageInvocationID = stageInvocationID % 64;
angle = stageInvocationID * 4.90873852123405174e-02f;
sdataID = gl_LocalInvocationID.y + 16;
sdataID = sdataID * 16;
sdataID = sdataID + gl_LocalInvocationID.x;
temp_1 = sdata[sdataID];
sdataID = gl_LocalInvocationID.y + 80;
sdataID = sdataID * 16;
sdataID = sdataID + gl_LocalInvocationID.x;
temp_5 = sdata[sdataID];
w.x = cos(angle);
w.y = sin(angle);
loc_0.x = temp_5.y * w.y;
loc_0.x = -loc_0.x;
loc_0.x = fma(temp_5.x, w.x, loc_0.x);
loc_0.y = temp_5.y * w.x;
loc_0.y = fma(temp_5.x, w.y, loc_0.y);
temp_5.x = temp_1.x - loc_0.x;
temp_5.y = temp_1.y - loc_0.y;
temp_1.x = temp_1.x + loc_0.x;
temp_1.y = temp_1.y + loc_0.y;
stageInvocationID = gl_LocalInvocationID.y + 32;
stageInvocationID = stageInvocationID % 64;
angle = stageInvocationID * 4.90873852123405174e-02f;
sdataID = gl_LocalInvocationID.y + 32;
sdataID = sdataID * 16;
sdataID = sdataID + gl_LocalInvocationID.x;
temp_2 = sdata[sdataID];
sdataID = gl_LocalInvocationID.y + 96;
sdataID = sdataID * 16;
sdataID = sdataID + gl_LocalInvocationID.x;
temp_6 = sdata[sdataID];
w.x = cos(angle);
w.y = sin(angle);
loc_0.x = temp_6.y * w.y;
loc_0.x = -loc_0.x;
loc_0.x = fma(temp_6.x, w.x, loc_0.x);
loc_0.y = temp_6.y * w.x;
loc_0.y = fma(temp_6.x, w.y, loc_0.y);
temp_6.x = temp_2.x - loc_0.x;
temp_6.y = temp_2.y - loc_0.y;
temp_2.x = temp_2.x + loc_0.x;
temp_2.y = temp_2.y + loc_0.y;
stageInvocationID = gl_LocalInvocationID.y + 48;
stageInvocationID = stageInvocationID % 64;
angle = stageInvocationID * 4.90873852123405174e-02f;
sdataID = gl_LocalInvocationID.y + 48;
sdataID = sdataID * 16;
sdataID = sdataID + gl_LocalInvocationID.x;
temp_3 = sdata[sdataID];
sdataID = gl_LocalInvocationID.y + 112;
sdataID = sdataID * 16;
sdataID = sdataID + gl_LocalInvocationID.x;
temp_7 = sdata[sdataID];
w.x = cos(angle);
w.y = sin(angle);
loc_0.x = temp_7.y * w.y;
loc_0.x = -loc_0.x;
loc_0.x = fma(temp_7.x, w.x, loc_0.x);
loc_0.y = temp_7.y * w.x;
loc_0.y = fma(temp_7.x, w.y, loc_0.y);
temp_7.x = temp_3.x - loc_0.x;
temp_7.y = temp_3.y - loc_0.y;
temp_3.x = temp_3.x + loc_0.x;
temp_3.y = temp_3.y + loc_0.y;
inoutID = shiftX / 8192;
tempInt2 = inoutID % 1;
tempInt2 = tempInt2 * 64;
tempInt = shiftX / 8192;
tempInt2 = tempInt2 + tempInt;
tempInt = inoutID % 1;
inoutID = shiftX / 8192;
inoutID = inoutID * 128;
tempInt = tempInt + inoutID;
if (tempInt < 8192) {
inoutID_y = gl_LocalInvocationID.y * 64;
inoutID_y = inoutID_y + tempInt2;
inoutID = inoutID_x;
tempInt = inoutID_y * 8192;
inoutID = inoutID + tempInt;
inoutID = inoutID + shiftZ;
outputBlocks[inoutID / 33554432].outputs[inoutID % 33554432] = temp_0;
inoutID = inoutID + 8388608;
outputBlocks[inoutID / 33554432].outputs[inoutID % 33554432] = temp_1;
inoutID = inoutID + 8388608;
outputBlocks[inoutID / 33554432].outputs[inoutID % 33554432] = temp_2;
inoutID = inoutID + 8388608;
outputBlocks[inoutID / 33554432].outputs[inoutID % 33554432] = temp_3;
inoutID = inoutID + 8388608;
outputBlocks[inoutID / 33554432].outputs[inoutID % 33554432] = temp_4;
inoutID = inoutID + 8388608;
outputBlocks[inoutID / 33554432].outputs[inoutID % 33554432] = temp_5;
inoutID = inoutID + 8388608;
outputBlocks[inoutID / 33554432].outputs[inoutID % 33554432] = temp_6;
inoutID = inoutID + 8388608;
outputBlocks[inoutID / 33554432].outputs[inoutID % 33554432] = temp_7;
}
}

ERROR: 0:586: 'outputBlocks' : undeclared identifier
ERROR: 0:586: 'outputBlocks' :  left of '[' is not of type array, matrix, or vector
ERROR: 0:586: '' : compilation terminated
ERROR: 3 compilation errors.  No code generated.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions