blob: 9c110bec9593dae8d64a62ab526f144ee31a7e91 [file]
// Copyright 2018 The MACE Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// RUN: clspv %s -o %t.spv
// RUN: spirv-dis %t.spv -o %t.spvasm
// RUN: FileCheck %s < %t.spvasm
// RUN: spirv-val --target-env vulkan1.0 %t.spv
// CHECK-NOT: OpCapability Int64
// CHECK: OpCompositeExtract
const sampler_t SAMPLER =
CLK_NORMALIZED_COORDS_FALSE | CLK_ADDRESS_CLAMP | CLK_FILTER_NEAREST;
__kernel void arg_image_to_buffer(__global float *output,
__private const int count,
__read_only image2d_t input) {
int w = get_global_id(0);
int h = get_global_id(1);
const int offset = (w << 2);
int2 coord = (int2)(w, h);
float4 values = read_imagef(input, SAMPLER, coord);
const int size = count - offset;
if (size < 4) {
switch (size) {
case 3:
output[offset+2] = values.s2;
case 2:
output[offset+1] = values.s1;
case 1:
output[offset] = values.s0;
}
} else {
vstore4(values, 0, output + offset);
}
}