spirv/nir: add support for int64
This adds the spirv->nir conversion for int64 types. Reviewed-by: Jason Ekstrand <jason@jlekstrand.net> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
@@ -104,6 +104,8 @@ vtn_const_ssa_value(struct vtn_builder *b, nir_constant *constant,
|
|||||||
switch (glsl_get_base_type(type)) {
|
switch (glsl_get_base_type(type)) {
|
||||||
case GLSL_TYPE_INT:
|
case GLSL_TYPE_INT:
|
||||||
case GLSL_TYPE_UINT:
|
case GLSL_TYPE_UINT:
|
||||||
|
case GLSL_TYPE_INT64:
|
||||||
|
case GLSL_TYPE_UINT64:
|
||||||
case GLSL_TYPE_BOOL:
|
case GLSL_TYPE_BOOL:
|
||||||
case GLSL_TYPE_FLOAT:
|
case GLSL_TYPE_FLOAT:
|
||||||
case GLSL_TYPE_DOUBLE: {
|
case GLSL_TYPE_DOUBLE: {
|
||||||
@@ -420,6 +422,8 @@ vtn_type_copy(struct vtn_builder *b, struct vtn_type *src)
|
|||||||
switch (glsl_get_base_type(src->type)) {
|
switch (glsl_get_base_type(src->type)) {
|
||||||
case GLSL_TYPE_INT:
|
case GLSL_TYPE_INT:
|
||||||
case GLSL_TYPE_UINT:
|
case GLSL_TYPE_UINT:
|
||||||
|
case GLSL_TYPE_INT64:
|
||||||
|
case GLSL_TYPE_UINT64:
|
||||||
case GLSL_TYPE_BOOL:
|
case GLSL_TYPE_BOOL:
|
||||||
case GLSL_TYPE_FLOAT:
|
case GLSL_TYPE_FLOAT:
|
||||||
case GLSL_TYPE_DOUBLE:
|
case GLSL_TYPE_DOUBLE:
|
||||||
@@ -715,8 +719,12 @@ vtn_handle_type(struct vtn_builder *b, SpvOp opcode,
|
|||||||
val->type->type = glsl_bool_type();
|
val->type->type = glsl_bool_type();
|
||||||
break;
|
break;
|
||||||
case SpvOpTypeInt: {
|
case SpvOpTypeInt: {
|
||||||
|
int bit_size = w[2];
|
||||||
const bool signedness = w[3];
|
const bool signedness = w[3];
|
||||||
val->type->type = (signedness ? glsl_int_type() : glsl_uint_type());
|
if (bit_size == 64)
|
||||||
|
val->type->type = (signedness ? glsl_int64_t_type() : glsl_uint64_t_type());
|
||||||
|
else
|
||||||
|
val->type->type = (signedness ? glsl_int_type() : glsl_uint_type());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SpvOpTypeFloat: {
|
case SpvOpTypeFloat: {
|
||||||
@@ -917,6 +925,8 @@ vtn_null_constant(struct vtn_builder *b, const struct glsl_type *type)
|
|||||||
switch (glsl_get_base_type(type)) {
|
switch (glsl_get_base_type(type)) {
|
||||||
case GLSL_TYPE_INT:
|
case GLSL_TYPE_INT:
|
||||||
case GLSL_TYPE_UINT:
|
case GLSL_TYPE_UINT:
|
||||||
|
case GLSL_TYPE_INT64:
|
||||||
|
case GLSL_TYPE_UINT64:
|
||||||
case GLSL_TYPE_BOOL:
|
case GLSL_TYPE_BOOL:
|
||||||
case GLSL_TYPE_FLOAT:
|
case GLSL_TYPE_FLOAT:
|
||||||
case GLSL_TYPE_DOUBLE:
|
case GLSL_TYPE_DOUBLE:
|
||||||
@@ -1071,6 +1081,8 @@ vtn_handle_constant(struct vtn_builder *b, SpvOp opcode,
|
|||||||
switch (glsl_get_base_type(val->const_type)) {
|
switch (glsl_get_base_type(val->const_type)) {
|
||||||
case GLSL_TYPE_UINT:
|
case GLSL_TYPE_UINT:
|
||||||
case GLSL_TYPE_INT:
|
case GLSL_TYPE_INT:
|
||||||
|
case GLSL_TYPE_UINT64:
|
||||||
|
case GLSL_TYPE_INT64:
|
||||||
case GLSL_TYPE_FLOAT:
|
case GLSL_TYPE_FLOAT:
|
||||||
case GLSL_TYPE_BOOL:
|
case GLSL_TYPE_BOOL:
|
||||||
case GLSL_TYPE_DOUBLE: {
|
case GLSL_TYPE_DOUBLE: {
|
||||||
@@ -1208,6 +1220,8 @@ vtn_handle_constant(struct vtn_builder *b, SpvOp opcode,
|
|||||||
switch (glsl_get_base_type(type)) {
|
switch (glsl_get_base_type(type)) {
|
||||||
case GLSL_TYPE_UINT:
|
case GLSL_TYPE_UINT:
|
||||||
case GLSL_TYPE_INT:
|
case GLSL_TYPE_INT:
|
||||||
|
case GLSL_TYPE_UINT64:
|
||||||
|
case GLSL_TYPE_INT64:
|
||||||
case GLSL_TYPE_FLOAT:
|
case GLSL_TYPE_FLOAT:
|
||||||
case GLSL_TYPE_DOUBLE:
|
case GLSL_TYPE_DOUBLE:
|
||||||
case GLSL_TYPE_BOOL:
|
case GLSL_TYPE_BOOL:
|
||||||
@@ -1377,6 +1391,8 @@ vtn_create_ssa_value(struct vtn_builder *b, const struct glsl_type *type)
|
|||||||
switch (glsl_get_base_type(type)) {
|
switch (glsl_get_base_type(type)) {
|
||||||
case GLSL_TYPE_INT:
|
case GLSL_TYPE_INT:
|
||||||
case GLSL_TYPE_UINT:
|
case GLSL_TYPE_UINT:
|
||||||
|
case GLSL_TYPE_INT64:
|
||||||
|
case GLSL_TYPE_UINT64:
|
||||||
case GLSL_TYPE_BOOL:
|
case GLSL_TYPE_BOOL:
|
||||||
case GLSL_TYPE_FLOAT:
|
case GLSL_TYPE_FLOAT:
|
||||||
case GLSL_TYPE_DOUBLE:
|
case GLSL_TYPE_DOUBLE:
|
||||||
|
@@ -115,6 +115,8 @@ vtn_access_chain_to_deref(struct vtn_builder *b, struct vtn_access_chain *chain)
|
|||||||
switch (base_type) {
|
switch (base_type) {
|
||||||
case GLSL_TYPE_UINT:
|
case GLSL_TYPE_UINT:
|
||||||
case GLSL_TYPE_INT:
|
case GLSL_TYPE_INT:
|
||||||
|
case GLSL_TYPE_UINT64:
|
||||||
|
case GLSL_TYPE_INT64:
|
||||||
case GLSL_TYPE_FLOAT:
|
case GLSL_TYPE_FLOAT:
|
||||||
case GLSL_TYPE_DOUBLE:
|
case GLSL_TYPE_DOUBLE:
|
||||||
case GLSL_TYPE_BOOL:
|
case GLSL_TYPE_BOOL:
|
||||||
@@ -347,6 +349,8 @@ vtn_access_chain_to_offset(struct vtn_builder *b,
|
|||||||
switch (base_type) {
|
switch (base_type) {
|
||||||
case GLSL_TYPE_UINT:
|
case GLSL_TYPE_UINT:
|
||||||
case GLSL_TYPE_INT:
|
case GLSL_TYPE_INT:
|
||||||
|
case GLSL_TYPE_UINT64:
|
||||||
|
case GLSL_TYPE_INT64:
|
||||||
case GLSL_TYPE_FLOAT:
|
case GLSL_TYPE_FLOAT:
|
||||||
case GLSL_TYPE_DOUBLE:
|
case GLSL_TYPE_DOUBLE:
|
||||||
case GLSL_TYPE_BOOL:
|
case GLSL_TYPE_BOOL:
|
||||||
@@ -395,6 +399,8 @@ vtn_type_block_size(struct vtn_type *type)
|
|||||||
switch (base_type) {
|
switch (base_type) {
|
||||||
case GLSL_TYPE_UINT:
|
case GLSL_TYPE_UINT:
|
||||||
case GLSL_TYPE_INT:
|
case GLSL_TYPE_INT:
|
||||||
|
case GLSL_TYPE_UINT64:
|
||||||
|
case GLSL_TYPE_INT64:
|
||||||
case GLSL_TYPE_FLOAT:
|
case GLSL_TYPE_FLOAT:
|
||||||
case GLSL_TYPE_BOOL:
|
case GLSL_TYPE_BOOL:
|
||||||
case GLSL_TYPE_DOUBLE: {
|
case GLSL_TYPE_DOUBLE: {
|
||||||
@@ -403,7 +409,9 @@ vtn_type_block_size(struct vtn_type *type)
|
|||||||
if (cols > 1) {
|
if (cols > 1) {
|
||||||
assert(type->stride > 0);
|
assert(type->stride > 0);
|
||||||
return type->stride * cols;
|
return type->stride * cols;
|
||||||
} else if (base_type == GLSL_TYPE_DOUBLE) {
|
} else if (base_type == GLSL_TYPE_DOUBLE ||
|
||||||
|
base_type == GLSL_TYPE_UINT64 ||
|
||||||
|
base_type == GLSL_TYPE_INT64) {
|
||||||
return glsl_get_vector_elements(type->type) * 8;
|
return glsl_get_vector_elements(type->type) * 8;
|
||||||
} else {
|
} else {
|
||||||
return glsl_get_vector_elements(type->type) * 4;
|
return glsl_get_vector_elements(type->type) * 4;
|
||||||
@@ -526,6 +534,8 @@ _vtn_block_load_store(struct vtn_builder *b, nir_intrinsic_op op, bool load,
|
|||||||
switch (base_type) {
|
switch (base_type) {
|
||||||
case GLSL_TYPE_UINT:
|
case GLSL_TYPE_UINT:
|
||||||
case GLSL_TYPE_INT:
|
case GLSL_TYPE_INT:
|
||||||
|
case GLSL_TYPE_UINT64:
|
||||||
|
case GLSL_TYPE_INT64:
|
||||||
case GLSL_TYPE_FLOAT:
|
case GLSL_TYPE_FLOAT:
|
||||||
case GLSL_TYPE_DOUBLE:
|
case GLSL_TYPE_DOUBLE:
|
||||||
case GLSL_TYPE_BOOL:
|
case GLSL_TYPE_BOOL:
|
||||||
@@ -738,6 +748,8 @@ _vtn_variable_load_store(struct vtn_builder *b, bool load,
|
|||||||
switch (base_type) {
|
switch (base_type) {
|
||||||
case GLSL_TYPE_UINT:
|
case GLSL_TYPE_UINT:
|
||||||
case GLSL_TYPE_INT:
|
case GLSL_TYPE_INT:
|
||||||
|
case GLSL_TYPE_UINT64:
|
||||||
|
case GLSL_TYPE_INT64:
|
||||||
case GLSL_TYPE_FLOAT:
|
case GLSL_TYPE_FLOAT:
|
||||||
case GLSL_TYPE_BOOL:
|
case GLSL_TYPE_BOOL:
|
||||||
case GLSL_TYPE_DOUBLE:
|
case GLSL_TYPE_DOUBLE:
|
||||||
@@ -815,6 +827,8 @@ _vtn_variable_copy(struct vtn_builder *b, struct vtn_access_chain *dest,
|
|||||||
switch (base_type) {
|
switch (base_type) {
|
||||||
case GLSL_TYPE_UINT:
|
case GLSL_TYPE_UINT:
|
||||||
case GLSL_TYPE_INT:
|
case GLSL_TYPE_INT:
|
||||||
|
case GLSL_TYPE_UINT64:
|
||||||
|
case GLSL_TYPE_INT64:
|
||||||
case GLSL_TYPE_FLOAT:
|
case GLSL_TYPE_FLOAT:
|
||||||
case GLSL_TYPE_DOUBLE:
|
case GLSL_TYPE_DOUBLE:
|
||||||
case GLSL_TYPE_BOOL:
|
case GLSL_TYPE_BOOL:
|
||||||
|
Reference in New Issue
Block a user