diff options
Diffstat (limited to 'mesalib/src/mesa/main')
-rw-r--r-- | mesalib/src/mesa/main/format_unpack.c | 120 | ||||
-rw-r--r-- | mesalib/src/mesa/main/format_unpack.h | 8 | ||||
-rw-r--r-- | mesalib/src/mesa/main/mtypes.h | 13 |
3 files changed, 141 insertions, 0 deletions
diff --git a/mesalib/src/mesa/main/format_unpack.c b/mesalib/src/mesa/main/format_unpack.c index eaa33dfdb..525bbcb1c 100644 --- a/mesalib/src/mesa/main/format_unpack.c +++ b/mesalib/src/mesa/main/format_unpack.c @@ -1258,7 +1258,127 @@ _mesa_unpack_rgba_row(gl_format format, GLuint n, } } +static void +unpack_int_rgba_RGBA_UINT32(const GLuint *src, GLuint dst[][4], GLuint n) +{ + memcpy(dst, src, n * 4 * sizeof(GLuint)); +} + +static void +unpack_int_rgba_RGB_UINT32(const GLuint *src, GLuint dst[][4], GLuint n) +{ + unsigned int i; + + for (i = 0; i < n; i++) { + dst[i][0] = src[i * 3 + 0]; + dst[i][1] = src[i * 3 + 1]; + dst[i][2] = src[i * 3 + 2]; + dst[i][3] = 1; + } +} + +static void +unpack_int_rgba_RG_UINT32(const GLuint *src, GLuint dst[][4], GLuint n) +{ + unsigned int i; + + for (i = 0; i < n; i++) { + dst[i][0] = src[i * 2 + 0]; + dst[i][1] = src[i * 2 + 1]; + dst[i][2] = 0; + dst[i][3] = 1; + } +} + +static void +unpack_int_rgba_R_UINT32(const GLuint *src, GLuint dst[][4], GLuint n) +{ + unsigned int i; + + for (i = 0; i < n; i++) { + dst[i][0] = src[i]; + dst[i][1] = 0; + dst[i][2] = 0; + dst[i][3] = 1; + } +} + +static void +unpack_int_rgba_LUMINANCE_UINT32(const GLuint *src, GLuint dst[][4], GLuint n) +{ + unsigned int i; + + for (i = 0; i < n; i++) { + dst[i][0] = dst[i][1] = dst[i][2] = src[i]; + dst[i][3] = 1; + } +} +static void +unpack_int_rgba_LUMINANCE_ALPHA_UINT32(const GLuint *src, GLuint dst[][4], GLuint n) +{ + unsigned int i; + + for (i = 0; i < n; i++) { + dst[i][0] = dst[i][1] = dst[i][2] = src[i * 2 + 0]; + dst[i][3] = src[i * 2 + 1]; + } +} + +static void +unpack_int_rgba_INTENSITY_UINT32(const GLuint *src, GLuint dst[][4], GLuint n) +{ + unsigned int i; + + for (i = 0; i < n; i++) { + dst[i][0] = dst[i][1] = dst[i][2] = dst[i][3] = src[i]; + } +} + +void +_mesa_unpack_int_rgba_row(gl_format format, GLuint n, + const void *src, GLuint dst[][4]) +{ + switch (format) { + /* Since there won't be any sign extension happening, there's no need to + * make separate paths for 32-bit-to-32-bit integer unpack. + */ + case MESA_FORMAT_RGBA_UINT32: + case MESA_FORMAT_RGBA_INT32: + unpack_int_rgba_RGBA_UINT32(src, dst, n); + break; + case MESA_FORMAT_RGB_UINT32: + case MESA_FORMAT_RGB_INT32: + unpack_int_rgba_RGB_UINT32(src, dst, n); + break; + case MESA_FORMAT_RG_UINT32: + case MESA_FORMAT_RG_INT32: + unpack_int_rgba_RG_UINT32(src, dst, n); + break; + case MESA_FORMAT_R_UINT32: + case MESA_FORMAT_R_INT32: + unpack_int_rgba_R_UINT32(src, dst, n); + break; + + case MESA_FORMAT_LUMINANCE_UINT32: + case MESA_FORMAT_LUMINANCE_INT32: + unpack_int_rgba_LUMINANCE_UINT32(src, dst, n); + break; + case MESA_FORMAT_LUMINANCE_ALPHA_UINT32: + case MESA_FORMAT_LUMINANCE_ALPHA_INT32: + unpack_int_rgba_LUMINANCE_ALPHA_UINT32(src, dst, n); + break; + case MESA_FORMAT_INTENSITY_UINT32: + case MESA_FORMAT_INTENSITY_INT32: + unpack_int_rgba_INTENSITY_UINT32(src, dst, n); + break; + + default: + _mesa_problem(NULL, "%s: bad format %s", __FUNCTION__, + _mesa_get_format_name(format)); + return; + } +} /** * Unpack a 2D rect of pixels returning float RGBA colors. diff --git a/mesalib/src/mesa/main/format_unpack.h b/mesalib/src/mesa/main/format_unpack.h index a8a829c88..0d13a2d39 100644 --- a/mesalib/src/mesa/main/format_unpack.h +++ b/mesalib/src/mesa/main/format_unpack.h @@ -29,12 +29,20 @@ _mesa_unpack_rgba_row(gl_format format, GLuint n, const void *src, GLfloat dst[][4]); +void +_mesa_unpack_int_rgba_row(gl_format format, GLuint n, + const void *src, GLuint dst[][4]); + extern void _mesa_unpack_rgba_block(gl_format format, const void *src, GLint srcRowStride, GLfloat dst[][4], GLint dstRowStride, GLuint x, GLuint y, GLuint width, GLuint height); +extern void +_mesa_unpack_uint_rgba_row(gl_format format, GLuint n, + const void *src, GLuint dst[][4]); + extern void _mesa_unpack_float_z_row(gl_format format, GLuint n, diff --git a/mesalib/src/mesa/main/mtypes.h b/mesalib/src/mesa/main/mtypes.h index 58dc9af0f..adcbaeb19 100644 --- a/mesalib/src/mesa/main/mtypes.h +++ b/mesalib/src/mesa/main/mtypes.h @@ -1824,6 +1824,16 @@ struct prog_instruction; struct gl_program_parameter_list; struct gl_uniform_list; +/** Post-link transform feedback info. */ +struct gl_transform_feedback_info { + unsigned NumOutputs; + + struct { + unsigned OutputRegister; + unsigned OutputBuffer; + unsigned NumComponents; + } Outputs[MAX_PROGRAM_OUTPUTS]; +}; /** * Base class for any kind of program object @@ -2206,6 +2216,9 @@ struct gl_shader_program GLchar **VaryingNames; /**< Array [NumVarying] of char * */ } TransformFeedback; + /** Post-link transform feedback info. */ + struct gl_transform_feedback_info LinkedTransformFeedback; + /** Geometry shader state - copied into gl_geometry_program at link time */ struct { GLint VerticesOut; |