10307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang/* 20307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang * Copyright 2010, The Android Open Source Project 30307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang * 40307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang * Licensed under the Apache License, Version 2.0 (the "License"); 50307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang * you may not use this file except in compliance with the License. 60307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang * You may obtain a copy of the License at 70307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang * 80307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang * http://www.apache.org/licenses/LICENSE-2.0 90307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang * 100307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang * Unless required by applicable law or agreed to in writing, software 110307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang * distributed under the License is distributed on an "AS IS" BASIS, 120307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang * See the License for the specific language governing permissions and 140307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang * limitations under the License. 150307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang */ 160307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang 17e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines#ifndef _COMPILE_SLANG_SLANG_RS_TYPE_SPEC_H_ // NOLINT 18e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines#define _COMPILE_SLANG_SLANG_RS_TYPE_SPEC_H_ 190307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang 200307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang#define RS_DATA_TYPE_CLASS_ENUMS \ 210307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang ENUM_RS_DATA_TYPE_CLASS(Primitive) \ 220307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang ENUM_RS_DATA_TYPE_CLASS(Pointer) \ 230307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang ENUM_RS_DATA_TYPE_CLASS(Vector) \ 240307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang ENUM_RS_DATA_TYPE_CLASS(Matrix) \ 250307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang ENUM_RS_DATA_TYPE_CLASS(ConstantArray) \ 260307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang ENUM_RS_DATA_TYPE_CLASS(Record) 270307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang 280307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang#define PRIMITIVE_DATA_TYPE_ENUMS \ 291f6c331d622ac645ab68a016aa4c577998547373Stephen Hines ENUM_PRIMITIVE_DATA_TYPE(Float16, NULL, 16) \ 301f6c331d622ac645ab68a016aa4c577998547373Stephen Hines ENUM_PRIMITIVE_DATA_TYPE(Float32, "float", 32) \ 311f6c331d622ac645ab68a016aa4c577998547373Stephen Hines ENUM_PRIMITIVE_DATA_TYPE(Float64, "double", 64) \ 321f6c331d622ac645ab68a016aa4c577998547373Stephen Hines ENUM_PRIMITIVE_DATA_TYPE(Signed8, "char", 8) \ 331f6c331d622ac645ab68a016aa4c577998547373Stephen Hines ENUM_PRIMITIVE_DATA_TYPE(Signed16, "short", 16) \ 341f6c331d622ac645ab68a016aa4c577998547373Stephen Hines ENUM_PRIMITIVE_DATA_TYPE(Signed32, "int", 32) \ 351f6c331d622ac645ab68a016aa4c577998547373Stephen Hines ENUM_PRIMITIVE_DATA_TYPE(Signed64, "long", 64) \ 361f6c331d622ac645ab68a016aa4c577998547373Stephen Hines ENUM_PRIMITIVE_DATA_TYPE(Unsigned8, "uchar", 8) \ 371f6c331d622ac645ab68a016aa4c577998547373Stephen Hines ENUM_PRIMITIVE_DATA_TYPE(Unsigned16, "ushort", 16) \ 381f6c331d622ac645ab68a016aa4c577998547373Stephen Hines ENUM_PRIMITIVE_DATA_TYPE(Unsigned32, "uint", 32) \ 391f6c331d622ac645ab68a016aa4c577998547373Stephen Hines ENUM_PRIMITIVE_DATA_TYPE(Unsigned64, "ulong", 64) \ 400307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang ENUM_PRIMITIVE_DATA_TYPE(Boolean, "bool", 8) \ 411f6c331d622ac645ab68a016aa4c577998547373Stephen Hines ENUM_PRIMITIVE_DATA_TYPE(Unsigned565, "u565", 16) \ 421f6c331d622ac645ab68a016aa4c577998547373Stephen Hines ENUM_PRIMITIVE_DATA_TYPE(Unsigned5551, "u5551", 16) \ 431f6c331d622ac645ab68a016aa4c577998547373Stephen Hines ENUM_PRIMITIVE_DATA_TYPE(Unsigned4444, "u4444", 16) \ 44b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang PRIMITIVE_DATA_TYPE_RANGE(Float16, Unsigned4444) 45b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang 46b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang#define RS_MATRIX_DATA_TYPE_ENUMS \ 47b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang ENUM_RS_MATRIX_DATA_TYPE(RSMatrix2x2, "rs_matrix2x2", 2) \ 48b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang ENUM_RS_MATRIX_DATA_TYPE(RSMatrix3x3, "rs_matrix3x3", 3) \ 49b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang ENUM_RS_MATRIX_DATA_TYPE(RSMatrix4x4, "rs_matrix4x4", 4) \ 50b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang RS_MATRIX_DATA_TYPE_RANGE(RSMatrix2x2, RSMatrix4x4) 510307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang 520307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang#define RS_OBJECT_DATA_TYPE_ENUMS \ 530307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang ENUM_RS_OBJECT_DATA_TYPE(RSElement, "rs_element") \ 540307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang ENUM_RS_OBJECT_DATA_TYPE(RSType, "rs_type") \ 550307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang ENUM_RS_OBJECT_DATA_TYPE(RSAllocation, "rs_allocation") \ 560307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang ENUM_RS_OBJECT_DATA_TYPE(RSSampler, "rs_sampler") \ 570307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang ENUM_RS_OBJECT_DATA_TYPE(RSScript, "rs_script") \ 580307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang ENUM_RS_OBJECT_DATA_TYPE(RSMesh, "rs_mesh") \ 59db6dfdfcb7e8183f1c796475e5098ee4be80b5b8Jason Sams ENUM_RS_OBJECT_DATA_TYPE(RSPath, "rs_path") \ 600307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang ENUM_RS_OBJECT_DATA_TYPE(RSProgramFragment, "rs_program_fragment") \ 610307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang ENUM_RS_OBJECT_DATA_TYPE(RSProgramVertex, "rs_program_vertex") \ 620307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang ENUM_RS_OBJECT_DATA_TYPE(RSProgramRaster, "rs_program_raster") \ 630307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang ENUM_RS_OBJECT_DATA_TYPE(RSProgramStore, "rs_program_store") \ 64b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang ENUM_RS_OBJECT_DATA_TYPE(RSFont, "rs_font") \ 65b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang RS_OBJECT_DATA_TYPE_RANGE(RSElement, RSFont) 660307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang 670307eaa71dc1d05582347cacd9209ac1e6100102Zonr Changenum RSTypeClass { 680307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang#define ENUM_RS_DATA_TYPE_CLASS(x) RS_TC_ ## x, 690307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang RS_DATA_TYPE_CLASS_ENUMS 700307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang#undef ENUM_RS_DATA_TYPE_CLASS 710307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang RS_TC_Max 720307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang}; 730307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang 740307eaa71dc1d05582347cacd9209ac1e6100102Zonr Changenum RSDataType { 750307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang#define ENUM_PRIMITIVE_DATA_TYPE(x, name, bits) RS_DT_ ## x, 76b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang#define PRIMITIVE_DATA_TYPE_RANGE(x, y) \ 77b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang RS_DT_FirstPrimitiveType = RS_DT_ ## x, \ 78b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang RS_DT_LastPrimitiveType = RS_DT_ ## y, 790307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang PRIMITIVE_DATA_TYPE_ENUMS 800307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang#undef ENUM_PRIMITIVE_DATA_TYPE 81b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang#undef PRIMITIVE_DATA_TYPE_RANGE 82b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang 83b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang#define ENUM_RS_MATRIX_DATA_TYPE(x, name, dim) RS_DT_ ## x, 84b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang#define RS_MATRIX_DATA_TYPE_RANGE(x, y) \ 85b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang RS_DT_FirstMatrixType = RS_DT_ ## x, \ 86b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang RS_DT_LastMatrixType = RS_DT_ ## y, 87b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang RS_MATRIX_DATA_TYPE_ENUMS 88b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang#undef ENUM_RS_MATRIX_DATA_TYPE 89b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang#undef RS_MATRIX_DATA_TYPE_RANGE 90b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang 91b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang#define ENUM_RS_OBJECT_DATA_TYPE(x, name) RS_DT_ ## x, 92b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang#define RS_OBJECT_DATA_TYPE_RANGE(x, y) \ 93b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang RS_DT_FirstRSObjectType = RS_DT_ ## x, \ 94b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang RS_DT_LastRSObjectType = RS_DT_ ## y, 95b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang RS_OBJECT_DATA_TYPE_ENUMS 960307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang#undef ENUM_RS_OBJECT_DATA_TYPE 97b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang#undef RS_OBJECT_DATA_TYPE_RANGE 98b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang 990307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang RS_DT_USER_DEFINED 1000307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang}; 1010307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang 1020307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang// Forward declaration 1030307eaa71dc1d05582347cacd9209ac1e6100102Zonr Changunion RSType; 1040307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang 1050307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang// NOTE: Current design need to keep struct RSTypeBase as a 4-byte integer for 1060307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang// efficient decoding process (see DecodeTypeMetadata). 1070307eaa71dc1d05582347cacd9209ac1e6100102Zonr Changstruct RSTypeBase { 1080307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang /* enum RSTypeClass tc; */ 1090307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang // tc is encoded in b[0]. 1100307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang union { 1110307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang // FIXME: handle big-endianess case 1120307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang unsigned bits; // NOTE: Little-endian is assumed. 1130307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang unsigned char b[4]; 1140307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang }; 1150307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang}; 1160307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang 1170307eaa71dc1d05582347cacd9209ac1e6100102Zonr Changstruct RSPrimitiveType { 1180307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang struct RSTypeBase base; 1190307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang /* enum RSDataType dt; */ 1200307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang // dt is encoded in base.b[1] 1210307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang}; 1220307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang 1230307eaa71dc1d05582347cacd9209ac1e6100102Zonr Changstruct RSPointerType { 1240307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang struct RSTypeBase base; 1250307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang const union RSType *pointee; 1260307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang}; 1270307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang 1280307eaa71dc1d05582347cacd9209ac1e6100102Zonr Changstruct RSVectorType { 1290307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang struct RSPrimitiveType base; // base type of vec must be in primitive type 1300307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang /* unsigned char vsize; */ 1310307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang // vsize is encoded in base.b[2] 1320307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang}; 1330307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang 134a7a828d1ff95c5a8f2327f56a137a2bcb3a9a8faZonr Chang// RSMatrixType is actually a specialize class of RSPrimitiveType whose value of 135a7a828d1ff95c5a8f2327f56a137a2bcb3a9a8faZonr Chang// dt (data type) can only be RS_DT_RSMatrix2x2, RS_DT_RSMatrix3x3 and 136a7a828d1ff95c5a8f2327f56a137a2bcb3a9a8faZonr Chang// RS_DT_RSMatrix4x4. 1370307eaa71dc1d05582347cacd9209ac1e6100102Zonr Changstruct RSMatrixType { 1380307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang struct RSTypeBase base; 1390307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang}; 1400307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang 1410307eaa71dc1d05582347cacd9209ac1e6100102Zonr Changstruct RSConstantArrayType { 1420307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang struct RSTypeBase base; 1430307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang const union RSType *element_type; 1440307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang /* unsigned esize; */ 1450307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang // esize is encoded in base.bits{8-31} in little-endian way. This implicates 1460307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang // the number of elements in any constant array type should never exceed 2^24. 1470307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang}; 1480307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang 1490307eaa71dc1d05582347cacd9209ac1e6100102Zonr Changstruct RSRecordField { 150e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines const char *name; // field name 1510307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang const union RSType *type; 1520307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang}; 1530307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang 1540307eaa71dc1d05582347cacd9209ac1e6100102Zonr Changstruct RSRecordType { 1550307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang struct RSTypeBase base; 1560307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang const char *name; // type name 1570307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang /* unsigned num_fields; */ 1580307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang // num_fields is encoded in base.bits{16-31} in little-endian way. This 1590307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang // implicates the number of fields defined in any record type should never 1600307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang // exceed 2^16. 1610307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang 1620307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang struct RSRecordField field[1]; 1630307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang}; 1640307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang 1650307eaa71dc1d05582347cacd9209ac1e6100102Zonr Changunion RSType { 1660307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang struct RSTypeBase base; 1670307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang struct RSPrimitiveType prim; 1680307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang struct RSPointerType pointer; 1690307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang struct RSVectorType vec; 1700307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang struct RSConstantArrayType ca; 1710307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang struct RSRecordType rec; 1720307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang}; 1730307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang 1740307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang#define RS_GET_TYPE_BASE(R) (&((R)->base)) 1750307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang#define RS_CAST_TO_PRIMITIVE_TYPE(R) (&((R)->prim)) 1760307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang#define RS_CAST_TO_POINTER_TYPE(R) (&((R)->pointer)) 1770307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang#define RS_CAST_TO_VECTOR_TYPE(R) (&((R)->vec)) 1780307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang#define RS_CAST_TO_CONSTANT_ARRAY_TYPE(R) (&((R)->ca)) 1790307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang#define RS_CAST_TO_RECORD_TYPE(R) (&((R)->rec)) 1800307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang 1810307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang// RSType 1820307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang#define RS_TYPE_GET_CLASS(R) RS_GET_TYPE_BASE(R)->b[0] 1830307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang#define RS_TYPE_SET_CLASS(R, V) RS_TYPE_GET_CLASS(R) = (V) 1840307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang 1850307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang// RSPrimitiveType 1860307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang#define RS_PRIMITIVE_TYPE_GET_DATA_TYPE(R) \ 1870307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang RS_CAST_TO_PRIMITIVE_TYPE(R)->base.b[1] 1880307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang#define RS_PRIMITIVE_TYPE_SET_DATA_TYPE(R, V) \ 1890307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang RS_PRIMITIVE_TYPE_GET_DATA_TYPE(R) = (V) 1900307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang 1910307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang// RSPointerType 1920307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang#define RS_POINTER_TYPE_GET_POINTEE_TYPE(R) \ 1930307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang RS_CAST_TO_POINTER_TYPE(R)->pointee 1940307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang#define RS_POINTER_TYPE_SET_POINTEE_TYPE(R, V) \ 1950307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang RS_POINTER_TYPE_GET_POINTEE_TYPE(R) = (V) 1960307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang 1970307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang// RSVectorType 1980307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang#define RS_VECTOR_TYPE_GET_ELEMENT_TYPE(R) \ 1990307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang RS_PRIMITIVE_TYPE_GET_DATA_TYPE(R) 2000307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang#define RS_VECTOR_TYPE_SET_ELEMENT_TYPE(R, V) \ 2010307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang RS_VECTOR_TYPE_GET_ELEMENT_TYPE(R) = (V) 2020307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang 2030307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang#define RS_VECTOR_TYPE_GET_VECTOR_SIZE(R) \ 2040307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang RS_CAST_TO_VECTOR_TYPE(R)->base.base.b[2] 2050307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang#define RS_VECTOR_TYPE_SET_VECTOR_SIZE(R, V) \ 2060307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang RS_VECTOR_TYPE_GET_VECTOR_SIZE(R) = (V) 2070307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang 2080307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang// RSMatrixType 209a7a828d1ff95c5a8f2327f56a137a2bcb3a9a8faZonr Chang#define RS_MATRIX_TYPE_GET_DATA_TYPE(R) RS_PRIMITIVE_TYPE_GET_DATA_TYPE(R) 210a7a828d1ff95c5a8f2327f56a137a2bcb3a9a8faZonr Chang#define RS_MATRIX_TYPE_SET_DATA_TYPE(R, V) \ 211a7a828d1ff95c5a8f2327f56a137a2bcb3a9a8faZonr Chang RS_MATRIX_TYPE_GET_DATA_TYPE(R) = (V) 2120307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang 2130307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang// RSConstantArrayType 2140307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang#define RS_CONSTANT_ARRAY_TYPE_GET_ELEMENT_TYPE(R) \ 2150307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang RS_CAST_TO_CONSTANT_ARRAY_TYPE(R)->element_type 2160307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang#define RS_CONSTANT_ARRAY_TYPE_SET_ELEMENT_TYPE(R, V) \ 2170307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang RS_CONSTANT_ARRAY_TYPE_GET_ELEMENT_TYPE(R) = (V) 2180307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang 2190307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang#define RS_CONSTANT_ARRAY_TYPE_GET_ELEMENT_SIZE(R) \ 2200307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang (RS_CAST_TO_CONSTANT_ARRAY_TYPE(R)->base.bits & 0x00ffffff) 2210307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang#define RS_CONSTANT_ARRAY_TYPE_SET_ELEMENT_SIZE(R, V) \ 2220307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang RS_CAST_TO_CONSTANT_ARRAY_TYPE(R)->base.bits = \ 2230307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang ((RS_CAST_TO_CONSTANT_ARRAY_TYPE(R)->base.bits & 0x000000ff) | \ 2240307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang ((V & 0xffffff) << 8)) 2250307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang 2260307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang// RSRecordType 2270307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang#define RS_RECORD_TYPE_GET_NAME(R) RS_CAST_TO_RECORD_TYPE(R)->name 2280307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang#define RS_RECORD_TYPE_SET_NAME(R, V) RS_RECORD_TYPE_GET_NAME(R) = (V) 2290307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang 2300307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang#define RS_RECORD_TYPE_GET_NUM_FIELDS(R) \ 2310307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang ((RS_CAST_TO_RECORD_TYPE(R)->base.bits & 0xffff0000) >> 16) 2320307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang#define RS_RECORD_TYPE_SET_NUM_FIELDS(R, V) \ 2330307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang RS_CAST_TO_RECORD_TYPE(R)->base.bits = \ 2340307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang ((RS_CAST_TO_RECORD_TYPE(R)->base.bits & 0x0000ffff) | ((V & 0xffff) << 16)) 2350307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang 2360307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang#define RS_RECORD_TYPE_GET_FIELD_NAME(R, I) \ 2370307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang RS_CAST_TO_RECORD_TYPE(R)->field[(I)].name 2380307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang#define RS_RECORD_TYPE_SET_FIELD_NAME(R, I, V) \ 2390307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang RS_RECORD_TYPE_GET_FIELD_NAME(R, I) = (V) 2400307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang 2410307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang#define RS_RECORD_TYPE_GET_FIELD_TYPE(R, I) \ 2420307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang RS_CAST_TO_RECORD_TYPE(R)->field[(I)].type 2430307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang#define RS_RECORD_TYPE_SET_FIELD_TYPE(R, I, V) \ 2440307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang RS_RECORD_TYPE_GET_FIELD_TYPE(R, I) = (V) 2450307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang 246e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines#endif // _COMPILE_SLANG_SLANG_RS_TYPE_SPEC_H_ NOLINT 247