nir: Add handle/index-based image intrinsics

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
Jason Ekstrand
2018-08-16 15:11:44 -05:00
parent 3942943819
commit 0de003be03
3 changed files with 82 additions and 20 deletions

View File

@@ -1049,7 +1049,7 @@ typedef struct {
#include "nir_intrinsics.h"
#define NIR_INTRINSIC_MAX_CONST_INDEX 3
#define NIR_INTRINSIC_MAX_CONST_INDEX 4
/** Represents an intrinsic
*
@@ -1197,6 +1197,28 @@ typedef enum {
*/
NIR_INTRINSIC_PARAM_IDX = 12,
/**
* Image dimensionality for image intrinsics
*
* One of GLSL_SAMPLER_DIM_*
*/
NIR_INTRINSIC_IMAGE_DIM = 13,
/**
* Non-zero if we are accessing an array image
*/
NIR_INTRINSIC_IMAGE_ARRAY = 14,
/**
* Image format for image intrinsics
*/
NIR_INTRINSIC_FORMAT = 15,
/**
* Access qualifiers for image intrinsics
*/
NIR_INTRINSIC_ACCESS = 16,
NIR_INTRINSIC_NUM_INDEX_FLAGS,
} nir_intrinsic_index_flag;
@@ -1265,7 +1287,7 @@ nir_intrinsic_##name(const nir_intrinsic_instr *instr) \
{ \
const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; \
assert(info->index_map[NIR_INTRINSIC_##flag] > 0); \
return instr->const_index[info->index_map[NIR_INTRINSIC_##flag] - 1]; \
return (type)instr->const_index[info->index_map[NIR_INTRINSIC_##flag] - 1]; \
} \
static inline void \
nir_intrinsic_set_##name(nir_intrinsic_instr *instr, type val) \
@@ -1287,6 +1309,10 @@ INTRINSIC_IDX_ACCESSORS(interp_mode, INTERP_MODE, unsigned)
INTRINSIC_IDX_ACCESSORS(reduction_op, REDUCTION_OP, unsigned)
INTRINSIC_IDX_ACCESSORS(cluster_size, CLUSTER_SIZE, unsigned)
INTRINSIC_IDX_ACCESSORS(param_idx, PARAM_IDX, unsigned)
INTRINSIC_IDX_ACCESSORS(image_dim, IMAGE_DIM, enum glsl_sampler_dim)
INTRINSIC_IDX_ACCESSORS(image_array, IMAGE_ARRAY, bool)
INTRINSIC_IDX_ACCESSORS(access, ACCESS, enum gl_access_qualifier)
INTRINSIC_IDX_ACCESSORS(format, FORMAT, unsigned)
/**
* \group texture information