subgroups::SSBOData inputData;
inputData.format = caseDef.format;
+ inputData.layout = subgroups::SSBOData::LayoutStd140;
inputData.numElements = subgroups::maxSupportedSubgroupSize();
inputData.initializeType = subgroups::SSBOData::InitializeNonZero;
}
subgroups::SSBOData inputData;
inputData.format = caseDef.format;
+ inputData.layout = subgroups::SSBOData::LayoutStd430;
inputData.numElements = subgroups::maxSupportedSubgroupSize();
inputData.initializeType = subgroups::SSBOData::InitializeNonZero;
subgroups::SSBOData inputData;
inputData.format = caseDef.format;
+ inputData.layout = subgroups::SSBOData::LayoutStd430;
inputData.numElements = subgroups::maxSupportedSubgroupSize();
inputData.initializeType = subgroups::SSBOData::InitializeNonZero;
inputData.binding = 4u;
subgroups::SSBOData inputData[1];
inputData[0].format = caseDef.format;
+ inputData[0].layout = subgroups::SSBOData::LayoutStd140;
inputData[0].numElements = subgroups::maxSupportedSubgroupSize();
inputData[0].initializeType = subgroups::SSBOData::InitializeNonZero;
}
subgroups::SSBOData inputData[1];
inputData[0].format = caseDef.format;
+ inputData[0].layout = subgroups::SSBOData::LayoutStd430;
inputData[0].numElements = subgroups::maxSupportedSubgroupSize();
inputData[0].initializeType = subgroups::SSBOData::InitializeNonZero;
subgroups::SSBOData inputData;
inputData.format = caseDef.format;
+ inputData.layout = subgroups::SSBOData::LayoutStd430;
inputData.numElements = subgroups::maxSupportedSubgroupSize();
inputData.initializeType = subgroups::SSBOData::InitializeNonZero;
inputData.binding = 4u;
subgroups::SSBOData inputData[1];
inputData[0].format = VK_FORMAT_R32_UINT;
+ inputData[0].layout = subgroups::SSBOData::LayoutStd140;
inputData[0].numElements = subgroups::maxSupportedSubgroupSize();
inputData[0].initializeType = subgroups::SSBOData::InitializeNonZero;
}
subgroups::SSBOData inputData[1];
inputData[0].format = VK_FORMAT_R32_UINT;
+ inputData[0].layout = subgroups::SSBOData::LayoutStd430;
inputData[0].numElements = subgroups::maxSupportedSubgroupSize();
inputData[0].initializeType = subgroups::SSBOData::InitializeNonZero;
subgroups::SSBOData inputData;
inputData.format = VK_FORMAT_R32_UINT;
+ inputData.layout = subgroups::SSBOData::LayoutStd430;
inputData.numElements = subgroups::maxSupportedSubgroupSize();
inputData.initializeType = subgroups::SSBOData::InitializeNonZero;
inputData.binding = 4u;
static const deUint32 UNELECTED_VALUE = 13u;
static const vk::VkDeviceSize SHADER_BUFFER_SIZE = 4096ull; // min(maxUniformBufferRange, maxImageDimension1D)
-static bool checkFragmentSubgroupBarriersNoSSBO(std::vector<const void*> datas,
- deUint32 width, deUint32 height, deUint32)
+static bool _checkFragmentSubgroupBarriersNoSSBO(std::vector<const void*> datas,
+ deUint32 width, deUint32 height, bool withImage)
{
const float* const resultData = reinterpret_cast<const float*>(datas[0]);
for (deUint32 y = 0u; y < height; ++y)
{
const deUint32 ndx = (x * height + y) * 4u;
- if (1.0f == resultData[ndx +2])
+ if (!withImage && 0.0f == resultData[ndx])
+ {
+ return false;
+ }
+ else if (1.0f == resultData[ndx +2])
{
if(resultData[ndx] != resultData[ndx +1])
{
return true;
}
+static bool checkFragmentSubgroupBarriersNoSSBO(std::vector<const void*> datas,
+ deUint32 width, deUint32 height, deUint32)
+{
+ return _checkFragmentSubgroupBarriersNoSSBO(datas, width, height, false);
+}
+
+static bool checkFragmentSubgroupBarriersWithImageNoSSBO(std::vector<const void*> datas,
+ deUint32 width, deUint32 height, deUint32)
+{
+ return _checkFragmentSubgroupBarriersNoSSBO(datas, width, height, true);
+}
+
static bool checkVertexPipelineStagesSubgroupElectNoSSBO(std::vector<const void*> datas,
deUint32 width, deUint32)
{
return true;
}
-static bool checkVertexPipelineStagesSubgroupBarriersNoSSBO(std::vector<const void*> datas,
- deUint32 width, deUint32)
+static bool _checkVertexPipelineStagesSubgroupBarriersNoSSBO(std::vector<const void*> datas,
+ deUint32 width, bool withImage)
{
const float* const resultData = reinterpret_cast<const float*>(datas[0]);
for (deUint32 x = 0u; x < width; ++x)
{
const deUint32 ndx = x*4u;
- if (1.0f == resultData[ndx +2])
+ if (!withImage && 0.0f == resultData[ndx])
+ {
+ return false;
+ }
+ else if (1.0f == resultData[ndx +2])
{
if(resultData[ndx] != resultData[ndx +1])
return false;
return true;
}
+static bool checkVertexPipelineStagesSubgroupBarriersNoSSBO(std::vector<const void*> datas,
+ deUint32 width, deUint32)
+{
+ return _checkVertexPipelineStagesSubgroupBarriersNoSSBO(datas, width, false);
+}
+
+static bool checkVertexPipelineStagesSubgroupBarriersWithImageNoSSBO(std::vector<const void*> datas,
+ deUint32 width, deUint32)
+{
+ return _checkVertexPipelineStagesSubgroupBarriersNoSSBO(datas, width, true);
+}
+
static bool checkTessellationEvaluationSubgroupBarriersNoSSBO(std::vector<const void*> datas,
deUint32 width, deUint32)
{
std::vector<subgroups::SSBOData> inputDatas (inputDatasCount);
inputDatas[0].format = VK_FORMAT_R32_UINT;
+ inputDatas[0].layout = subgroups::SSBOData::LayoutStd140;
inputDatas[0].numElements = SHADER_BUFFER_SIZE/4ull;
inputDatas[0].initializeType = subgroups::SSBOData::InitializeNonZero;
inputDatas[1].format = VK_FORMAT_R32_UINT;
+ inputDatas[1].layout = subgroups::SSBOData::LayoutStd140;
inputDatas[1].numElements = 1ull;
inputDatas[1].initializeType = subgroups::SSBOData::InitializeNonZero;
if(OPTYPE_SUBGROUP_MEMORY_BARRIER_IMAGE == caseDef.opType )
{
inputDatas[2].format = VK_FORMAT_R32_UINT;
+ inputDatas[2].layout = subgroups::SSBOData::LayoutPacked;
inputDatas[2].numElements = SHADER_BUFFER_SIZE;
inputDatas[2].initializeType = subgroups::SSBOData::InitializeNone;
inputDatas[2].isImage = true;
if (OPTYPE_ELECT == caseDef.opType)
return subgroups::makeVertexFrameBufferTest(context, VK_FORMAT_R32G32_SFLOAT, DE_NULL, 0u, checkVertexPipelineStagesSubgroupElectNoSSBO);
else
- return subgroups::makeVertexFrameBufferTest(context, VK_FORMAT_R32G32B32A32_SFLOAT, &inputDatas[0], inputDatasCount, checkVertexPipelineStagesSubgroupBarriersNoSSBO);
+ return subgroups::makeVertexFrameBufferTest(context, VK_FORMAT_R32G32B32A32_SFLOAT, &inputDatas[0], inputDatasCount,
+ (OPTYPE_SUBGROUP_MEMORY_BARRIER_IMAGE == caseDef.opType) ?
+ checkVertexPipelineStagesSubgroupBarriersWithImageNoSSBO :
+ checkVertexPipelineStagesSubgroupBarriersNoSSBO
+ );
}
else if (VK_SHADER_STAGE_FRAGMENT_BIT == caseDef.shaderStage)
{
- return subgroups::makeFragmentFrameBufferTest(context, VK_FORMAT_R32G32B32A32_SFLOAT, &inputDatas[0], inputDatasCount, checkFragmentSubgroupBarriersNoSSBO);
+ return subgroups::makeFragmentFrameBufferTest(context, VK_FORMAT_R32G32B32A32_SFLOAT, &inputDatas[0], inputDatasCount,
+ (OPTYPE_SUBGROUP_MEMORY_BARRIER_IMAGE == caseDef.opType) ?
+ checkFragmentSubgroupBarriersWithImageNoSSBO :
+ checkFragmentSubgroupBarriersNoSSBO
+ );
}
else if (VK_SHADER_STAGE_GEOMETRY_BIT == caseDef.shaderStage)
{
if (OPTYPE_ELECT == caseDef.opType)
return subgroups::makeGeometryFrameBufferTest(context, VK_FORMAT_R32G32_SFLOAT, DE_NULL, 0u, checkVertexPipelineStagesSubgroupElectNoSSBO);
else
- return subgroups::makeGeometryFrameBufferTest(context, VK_FORMAT_R32G32B32A32_SFLOAT, &inputDatas[0], inputDatasCount, checkVertexPipelineStagesSubgroupBarriersNoSSBO);
+ return subgroups::makeGeometryFrameBufferTest(context, VK_FORMAT_R32G32B32A32_SFLOAT, &inputDatas[0], inputDatasCount,
+ (OPTYPE_SUBGROUP_MEMORY_BARRIER_IMAGE == caseDef.opType) ?
+ checkVertexPipelineStagesSubgroupBarriersWithImageNoSSBO :
+ checkVertexPipelineStagesSubgroupBarriersNoSSBO
+ );
}
if (OPTYPE_ELECT == caseDef.opType)
const deUint32 inputDatasCount = 3;
subgroups::SSBOData inputDatas[inputDatasCount];
inputDatas[0].format = VK_FORMAT_R32_UINT;
+ inputDatas[0].layout = subgroups::SSBOData::LayoutStd430;
inputDatas[0].numElements = SHADER_BUFFER_SIZE;
inputDatas[0].initializeType = subgroups::SSBOData::InitializeNone;
inputDatas[1].format = VK_FORMAT_R32_UINT;
+ inputDatas[1].layout = subgroups::SSBOData::LayoutStd430;
inputDatas[1].numElements = 1;
inputDatas[1].initializeType = subgroups::SSBOData::InitializeNonZero;
inputDatas[2].format = VK_FORMAT_R32_UINT;
+ inputDatas[2].layout = subgroups::SSBOData::LayoutPacked;
inputDatas[2].numElements = SHADER_BUFFER_SIZE;
inputDatas[2].initializeType = subgroups::SSBOData::InitializeNone;
inputDatas[2].isImage = true;
subgroups::SSBOData inputData[inputCount];
inputData[0].format = VK_FORMAT_R32_UINT;
+ inputData[0].layout = subgroups::SSBOData::LayoutStd430;
inputData[0].numElements = 1;
inputData[0].initializeType = subgroups::SSBOData::InitializeZero;
inputData[0].binding = 4u;
inputData[0].stages = VK_SHADER_STAGE_VERTEX_BIT;
inputData[1].format = VK_FORMAT_R32_UINT;
+ inputData[1].layout = subgroups::SSBOData::LayoutStd430;
inputData[1].numElements = 1;
inputData[1].initializeType = subgroups::SSBOData::InitializeZero;
inputData[1].binding = 5u;
inputData[1].stages = VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT;
inputData[2].format = VK_FORMAT_R32_UINT;
+ inputData[2].layout = subgroups::SSBOData::LayoutStd430;
inputData[2].numElements = 1;
inputData[2].initializeType = subgroups::SSBOData::InitializeZero;
inputData[2].binding = 6u;
inputData[2].stages = VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT;
inputData[3].format = VK_FORMAT_R32_UINT;
+ inputData[3].layout = subgroups::SSBOData::LayoutStd430;
inputData[3].numElements = 1;
inputData[3].initializeType = subgroups::SSBOData::InitializeZero;
inputData[3].binding = 7u;
inputData[3].stages = VK_SHADER_STAGE_GEOMETRY_BIT;
inputData[4].format = VK_FORMAT_R32_UINT;
+ inputData[4].layout = subgroups::SSBOData::LayoutStd430;
inputData[4].numElements = 1;
inputData[4].initializeType = subgroups::SSBOData::InitializeZero;
inputData[4].binding = 8u;
{
const deUint32 index = ndx*4;
inputDatas[index].format = VK_FORMAT_R32_UINT;
+ inputDatas[index].layout = subgroups::SSBOData::LayoutStd430;
inputDatas[index].numElements = SHADER_BUFFER_SIZE;
inputDatas[index].initializeType = subgroups::SSBOData::InitializeNonZero;
inputDatas[index].binding = index + 4u;
inputDatas[index].stages = stagesBits[ndx];
inputDatas[index + 1].format = VK_FORMAT_R32_UINT;
+ inputDatas[index + 1].layout = subgroups::SSBOData::LayoutStd430;
inputDatas[index + 1].numElements = 1;
inputDatas[index + 1].initializeType = subgroups::SSBOData::InitializeZero;
inputDatas[index + 1].binding = index + 5u;
inputDatas[index + 1].stages = stagesBits[ndx];
inputDatas[index + 2].format = VK_FORMAT_R32_UINT;
+ inputDatas[index + 2].layout = subgroups::SSBOData::LayoutStd430;
inputDatas[index + 2].numElements = 1;
inputDatas[index + 2].initializeType = subgroups::SSBOData::InitializeNonZero;
inputDatas[index + 2].binding = index + 6u;
inputDatas[index + 2].stages = stagesBits[ndx];
inputDatas[index + 3].format = VK_FORMAT_R32_UINT;
+ inputDatas[index + 3].layout = subgroups::SSBOData::LayoutStd430;
inputDatas[index + 3].numElements = SHADER_BUFFER_SIZE;
inputDatas[index + 3].initializeType = subgroups::SSBOData::InitializeNone;
inputDatas[index + 3].isImage = true;
subgroups::SSBOData inputData;
inputData.format = caseDef.format;
+ inputData.layout = subgroups::SSBOData::LayoutStd140;
inputData.numElements = subgroups::maxSupportedSubgroupSize();
inputData.initializeType = subgroups::SSBOData::InitializeNonZero;
}
subgroups::SSBOData inputData;
inputData.format = caseDef.format;
+ inputData.layout = subgroups::SSBOData::LayoutStd430;
inputData.numElements = subgroups::maxSupportedSubgroupSize();
inputData.initializeType = subgroups::SSBOData::InitializeNonZero;
subgroups::SSBOData inputData;
inputData.format = caseDef.format;
+ inputData.layout = subgroups::SSBOData::LayoutStd430;
inputData.numElements = subgroups::maxSupportedSubgroupSize();
inputData.initializeType = subgroups::SSBOData::InitializeNonZero;
inputData.binding = 4u;
subgroups::SSBOData inputData;
inputData.format = caseDef.format;
+ inputData.layout = subgroups::SSBOData::LayoutStd140;
inputData.numElements = subgroups::maxSupportedSubgroupSize();
inputData.initializeType = subgroups::SSBOData::InitializeNonZero;
}
subgroups::SSBOData inputData;
inputData.format = caseDef.format;
+ inputData.layout = subgroups::SSBOData::LayoutStd430;
inputData.numElements = subgroups::maxSupportedSubgroupSize();
inputData.initializeType = subgroups::SSBOData::InitializeNonZero;
subgroups::SSBOData inputData;
inputData.format = caseDef.format;
+ inputData.layout = subgroups::SSBOData::LayoutStd430;
inputData.numElements = subgroups::maxSupportedSubgroupSize();
inputData.initializeType = subgroups::SSBOData::InitializeNonZero;
inputData.binding = 4u;
subgroups::SSBOData inputData;
inputData.format = caseDef.format;
+ inputData.layout = subgroups::SSBOData::LayoutStd140;
inputData.numElements = subgroups::maxSupportedSubgroupSize();
inputData.initializeType = subgroups::SSBOData::InitializeNonZero;;
}
subgroups::SSBOData inputData;
inputData.format = caseDef.format;
+ inputData.layout = subgroups::SSBOData::LayoutStd430;
inputData.numElements = subgroups::maxSupportedSubgroupSize();
inputData.initializeType = subgroups::SSBOData::InitializeNonZero;
subgroups::SSBOData inputData;
inputData.format = caseDef.format;
+ inputData.layout = subgroups::SSBOData::LayoutStd430;
inputData.numElements = subgroups::maxSupportedSubgroupSize();
inputData.initializeType = subgroups::SSBOData::InitializeNonZero;
inputData.binding = 4u;
subgroups::SSBOData inputData[2];
inputData[0].format = caseDef.format;
+ inputData[0].layout = subgroups::SSBOData::LayoutStd140;
inputData[0].numElements = subgroups::maxSupportedSubgroupSize();
inputData[0].initializeType = subgroups::SSBOData::InitializeNonZero;
inputData[1].format = VK_FORMAT_R32_UINT;
+ inputData[1].layout = subgroups::SSBOData::LayoutStd140;
inputData[1].numElements = inputData[0].numElements;
inputData[1].initializeType = subgroups::SSBOData::InitializeNonZero;
}
subgroups::SSBOData inputData[2];
inputData[0].format = caseDef.format;
+ inputData[0].layout = subgroups::SSBOData::LayoutStd430;
inputData[0].numElements = subgroups::maxSupportedSubgroupSize();
inputData[0].initializeType = subgroups::SSBOData::InitializeNonZero;
inputData[1].format = VK_FORMAT_R32_UINT;
+ inputData[1].layout = subgroups::SSBOData::LayoutStd430;
inputData[1].numElements = inputData[0].numElements;
inputData[1].initializeType = subgroups::SSBOData::InitializeNonZero;
subgroups::SSBOData inputData[2];
inputData[0].format = caseDef.format;
+ inputData[0].layout = subgroups::SSBOData::LayoutStd430;
inputData[0].numElements = subgroups::maxSupportedSubgroupSize();
inputData[0].initializeType = subgroups::SSBOData::InitializeNonZero;
inputData[0].binding = 4u;
inputData[0].stages = stages;
inputData[1].format = VK_FORMAT_R32_UINT;
+ inputData[1].layout = subgroups::SSBOData::LayoutStd430;
inputData[1].numElements = inputData[0].numElements;
inputData[1].initializeType = subgroups::SSBOData::InitializeNonZero;
inputData[1].binding = 5u;
}
}
+deUint32 getElementSizeInBytes(
+ const VkFormat format,
+ const subgroups::SSBOData::InputDataLayoutType layout)
+{
+ deUint32 bytes = getFormatSizeInBytes(format);
+ if (layout == subgroups::SSBOData::LayoutStd140)
+ return bytes < 16 ? 16 : bytes;
+ else
+ return bytes;
+}
+
Move<VkPipelineLayout> makePipelineLayout(
Context& context, const VkDescriptorSetLayout descriptorSetLayout)
{
VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,
DE_NULL,
0u,
- sizeInBytes,
+ m_sizeInBytes,
m_usage,
VK_SHARING_MODE_EXCLUSIVE,
0u,
context.getDevice(), &bufferCreateInfo);
vk::VkMemoryRequirements req = getBufferMemoryRequirements(
context.getDeviceInterface(), context.getDevice(), *m_buffer);
- req.size *= 4;
m_allocation = context.getDefaultAllocator().allocate(
req, MemoryRequirement::HostVisible);
VK_CHECK(context.getDeviceInterface().bindBufferMemory(
void initializeMemory(Context& context, const Allocation& alloc, subgroups::SSBOData& data)
{
const vk::VkFormat format = data.format;
- const vk::VkDeviceSize size = getFormatSizeInBytes(format) * data.numElements;
+ const vk::VkDeviceSize size = data.numElements *
+ (data.isImage ? getFormatSizeInBytes(format) : getElementSizeInBytes(format, data.layout));
if (subgroups::SSBOData::InitializeNonZero == data.initializeType)
{
de::Random rnd(context.getTestContext().getCommandLine().getBaseSeed());
}
else
{
- vk::VkDeviceSize size = getFormatSizeInBytes(extraData[i].format) * extraData[i].numElements;
+ vk::VkDeviceSize size = getElementSizeInBytes(extraData[i].format, extraData[i].layout) * extraData[i].numElements;
inputBuffers[i] = de::SharedPtr<BufferOrImage>(new Buffer(context, size, VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT));
}
const Allocation& alloc = inputBuffers[i]->getAllocation();
}
else
{
- vk::VkDeviceSize size = getFormatSizeInBytes(extraData[i].format) * extraData[i].numElements;
+ vk::VkDeviceSize size = getElementSizeInBytes(extraData[i].format, extraData[i].layout) * extraData[i].numElements;
inputBuffers[i] = de::SharedPtr<BufferOrImage>(new Buffer(context, size, VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT));
}
const Allocation& alloc = inputBuffers[i]->getAllocation();
for (deUint32 ndx = 0u; ndx < stagesCount; ++ndx)
{
const VkDeviceSize shaderSize = (stagesVector[ndx] == VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT) ? maxWidth * 2 : maxWidth;
- const VkDeviceSize size = getFormatSizeInBytes(format) * shaderSize;
+ const VkDeviceSize size = getElementSizeInBytes(format, SSBOData::LayoutStd430) * shaderSize;
inputBuffers[ndx] = de::SharedPtr<BufferOrImage>(new Buffer(context, size));
layoutBuilder.addIndexedBinding(inputBuffers[ndx]->getType(), 1, stagesVector[ndx], getResultBinding(stagesVector[ndx]), DE_NULL);
}
else
{
- const vk::VkDeviceSize size = getFormatSizeInBytes(extraDatas[datasNdx].format) * extraDatas[datasNdx].numElements;
+ const vk::VkDeviceSize size = getElementSizeInBytes(extraDatas[datasNdx].format, extraDatas[datasNdx].layout) * extraDatas[datasNdx].numElements;
inputBuffers[ndx] = de::SharedPtr<BufferOrImage>(new Buffer(context, size));
}
}
else
{
- vk::VkDeviceSize size = getFormatSizeInBytes(extraData[i].format) * extraData[i].numElements;
+ vk::VkDeviceSize size = getElementSizeInBytes(extraData[i].format, extraData[i].layout) * extraData[i].numElements;
inputBuffers[i] = de::SharedPtr<BufferOrImage>(new Buffer(context, size, VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT));
}
const Allocation& alloc = inputBuffers[i]->getAllocation();
else
{
vk::VkDeviceSize size =
- getFormatSizeInBytes(extraDatas[i].format) * extraDatas[i].numElements;
+ getElementSizeInBytes(extraDatas[i].format, extraDatas[i].layout) * extraDatas[i].numElements;
inputBuffers[i] = de::SharedPtr<BufferOrImage>(new Buffer(context, size, VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT));
}
else
{
vk::VkDeviceSize size =
- getFormatSizeInBytes(inputs[i].format) * inputs[i].numElements;
+ getElementSizeInBytes(inputs[i].format, inputs[i].layout) * inputs[i].numElements;
inputBuffers[i] = de::SharedPtr<BufferOrImage>(new Buffer(context, size));
}
else
{
vk::VkDeviceSize size =
- getFormatSizeInBytes(inputs[i].format) * inputs[i].numElements;
+ getElementSizeInBytes(inputs[i].format, inputs[i].layout) * inputs[i].numElements;
VkDescriptorBufferInfo info =
makeDescriptorBufferInfo(inputBuffers[i]->getAsBuffer()->getBuffer(), 0ull, size);
if (!inputBuffers[i]->isImage())
{
vk::VkDeviceSize size =
- getFormatSizeInBytes(inputs[i].format) *
+ getElementSizeInBytes(inputs[i].format, inputs[i].layout) *
inputs[i].numElements;
const Allocation& resultAlloc = inputBuffers[i]->getAllocation();
invalidateMappedMemoryRange(context.getDeviceInterface(),
{
SSBOData() :
initializeType (InitializeNone),
+ layout (LayoutStd140),
format (vk::VK_FORMAT_UNDEFINED),
numElements (0),
isImage (false),
InitializeZero,
} initializeType;
+ enum InputDataLayoutType
+ {
+ LayoutStd140 = 0,
+ LayoutStd430,
+ LayoutPacked
+ } layout;
+
vk::VkFormat format;
vk::VkDeviceSize numElements;
bool isImage;
subgroups::SSBOData inputData;
inputData.format = caseDef.format;
+ inputData.layout = subgroups::SSBOData::LayoutStd140;
inputData.numElements = subgroups::maxSupportedSubgroupSize();
inputData.initializeType = OPTYPE_ALLEQUAL == caseDef.opType ? subgroups::SSBOData::InitializeZero : subgroups::SSBOData::InitializeNonZero;
subgroups::SSBOData inputData;
inputData.format = caseDef.format;
+ inputData.layout = subgroups::SSBOData::LayoutStd430;
inputData.numElements = subgroups::maxSupportedSubgroupSize();
inputData.initializeType = OPTYPE_ALLEQUAL == caseDef.opType ? subgroups::SSBOData::InitializeZero : subgroups::SSBOData::InitializeNonZero;
subgroups::SSBOData inputData;
inputData.format = caseDef.format;
+ inputData.layout = subgroups::SSBOData::LayoutStd430;
inputData.numElements = subgroups::maxSupportedSubgroupSize();
inputData.initializeType = OPTYPE_ALLEQUAL == caseDef.opType ? subgroups::SSBOData::InitializeZero : subgroups::SSBOData::InitializeNonZero;
inputData.binding = 4u;