C++程序  |  76行  |  1.44 KB

//
// Copyright 2016 Google Inc.
//
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
//

#ifndef HS_GLSL_MACROS_VENDOR_ONCE
#define HS_GLSL_MACROS_VENDOR_ONCE

//
//
//

#include "../hs_glsl_macros.h"

//
// Waiting for Intel's to provide an equivalent to their OpenCL
// "reqd_subgroup_size" attribute.
//

#define HS_GLSL_SUBGROUP_SIZE()

//
// OVERRIDE SUBGROUP IDENTIFIERS BECAUSE INTEL ISN'T GUARANTEEING A
// FIXED SUBGROUP SIZE AT THIS POINT IN TIME
//

#if 1

#define HS_SUBGROUP_PREAMBLE()                                          \
  const uint hs_subgroup_id      = gl_LocalInvocationID.x / HS_SLAB_THREADS; \
  const uint hs_subgroup_lane_id = gl_LocalInvocationID.x & (HS_SLAB_THREADS-1);

#define HS_SUBGROUP_ID()        hs_subgroup_id
#define HS_SUBGROUP_LANE_ID()   hs_subgroup_lane_id

#else

#define HS_SUBGROUP_PREAMBLE()

#define HS_SUBGROUP_ID()        gl_SubgroupID
#define HS_SUBGROUP_LANE_ID()   gl_SubgroupInvocationID

#endif

//
// CHOOSE A COMPARE-EXCHANGE IMPLEMENTATION
//

#if   (HS_KEY_WORDS == 1)
#define HS_CMP_XCHG(a,b)  HS_CMP_XCHG_V0(a,b)
#elif (HS_KEY_WORDS == 2)
#define HS_CMP_XCHG(a,b)  HS_CMP_XCHG_V1(a,b)
#endif

//
// CHOOSE A CONDITIONAL MIN/MAX IMPLEMENTATION
//

#if   (HS_KEY_WORDS == 1)
#define HS_COND_MIN_MAX(lt,a,b) HS_COND_MIN_MAX_V0(lt,a,b)
#elif (HS_KEY_WORDS == 2)
#define HS_COND_MIN_MAX(lt,a,b) HS_COND_MIN_MAX_V0(lt,a,b)
#endif

//
//
//

#endif

//
//
//