From: Vitaliy Cherepanov Date: Wed, 12 Mar 2014 13:03:43 +0000 (+0400) Subject: [PROTO] implement pack array types for probe arguments X-Git-Tag: Tizen_SDK_2.3~77 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F26%2F17926%2F4;p=platform%2Fcore%2Fsystem%2Fswap-probe.git [PROTO] implement pack array types for probe arguments implemented 'F'(float array) 'D'(uint32_t array) 'W'(double array) types array format. example for float array: type info/sample size --------------------------------------------------- char 'F' (1byte), uint64_t original array pointer (8bytes), uint32_t elements count (4 bytes), float el #1 (sizeof(float) bytes) ... float el #n (sizeof(float) bytes) Change-Id: I33f0bd6026b56d57e1554686ea38317cc705253f Signed-off-by: Vitaliy Cherepanov --- diff --git a/include/binproto.h b/include/binproto.h index ca9cb44..6e0a46d 100644 --- a/include/binproto.h +++ b/include/binproto.h @@ -126,6 +126,42 @@ static inline char *pack_timestamp(char *to) return to; } +/////////////////////////////////////////////////////////////////// +// function: pack_array +/////////////////////////////////////////////////////////////////// +// info: +// Pack array param to buffer +// params: +// char *to - destination buffer +// va_list *args - array size and array (pointer) +// uint32_t element_size - size of array element +// return: +// char * - destination pointer end after pack +static char *pack_array(char *to, va_list *args, uint32_t element_size) +{ + uint32_t d; + uint64_t p; + + // get array elements count + d = va_arg(*args, uint32_t); + // get array pointer + p = (unsigned long)(uintptr_t)va_arg(*args, uint64_t); + + // pack original pointer + memcpy(to, &p, sizeof(p)); + to += sizeof(p); + // pack array elements count + memcpy(to, &d, sizeof(d)); + to += sizeof(d); + + // pack array elements + element_size *= d; + memcpy(to, (void *)(long)p, element_size); + to += element_size; + + return to; +} + static char __attribute__((used)) *pack_value_by_type(char *to, const char t, va_list *args) { uint8_t c; @@ -181,6 +217,19 @@ static char __attribute__((used)) *pack_value_by_type(char *to, const char t, va case 'v': case 'n': break; + /* pack arrays params */ + case 'D': + /* array of 'd' uint32_t */ + to = pack_array(to, args, sizeof(d)); + break; + case 'F': + /* array of 'f' float */ + to = pack_array(to, args, sizeof(f)); + break; + case 'W': + /* array of 'w' double */ + to = pack_array(to, args, sizeof(w)); + break; default: to--; break; @@ -378,6 +427,7 @@ static char __attribute__((used)) *pack_ret(char *to, char ret_type, ...) #define MAX_SHADER_LEN (4 * 1024) #define ADD_LOCAL_BUF_SIZE (1024) +#define MAX_GL_CONTEXT_VALUE_SIZE (1024) #define MAX_LOCAL_BUF_SIZE (MAX_SHADER_LEN + ADD_LOCAL_BUF_SIZE) #define LOCAL_BUF msg_buf diff --git a/probe_graphics/da_gles20_tizen.cpp b/probe_graphics/da_gles20_tizen.cpp index 201e26b..9c701d5 100644 --- a/probe_graphics/da_gles20_tizen.cpp +++ b/probe_graphics/da_gles20_tizen.cpp @@ -34,7 +34,7 @@ #include "binproto.h" #include "common_probe_init.h" -static char contextValue[256]; +static char contextValue[MAX_GL_CONTEXT_VALUE_SIZE]; static enum DaOptions _sopt = OPT_GLES; static __thread GLenum gl_error_external = GL_NO_ERROR; @@ -1376,8 +1376,8 @@ void glUniform1fv(GLint location, GLsizei count, const GLfloat *value) { BEFORE(glUniform1fv); glUniform1fvp(location, count, value); GL_GET_ERROR(); - AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddp", - location, count, voidp_to_uint64(value)); + AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddF", + location, count, count * 1, voidp_to_uint64(value)); } void glUniform2fv(GLint location, GLsizei count, const GLfloat *value) { @@ -1385,8 +1385,8 @@ void glUniform2fv(GLint location, GLsizei count, const GLfloat *value) { BEFORE(glUniform2fv); glUniform2fvp(location, count, value); GL_GET_ERROR(); - AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddp", - location, count, voidp_to_uint64(value)); + AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddF", + location, count, count * 2, voidp_to_uint64(value)); } void glUniform3fv(GLint location, GLsizei count, const GLfloat *value) { @@ -1394,8 +1394,8 @@ void glUniform3fv(GLint location, GLsizei count, const GLfloat *value) { BEFORE(glUniform3fv); glUniform3fvp(location, count, value); GL_GET_ERROR(); - AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddp", - location, count, voidp_to_uint64(value)); + AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddF", + location, count, count * 3, voidp_to_uint64(value)); } void glUniform4fv(GLint location, GLsizei count, const GLfloat *value) { @@ -1403,8 +1403,8 @@ void glUniform4fv(GLint location, GLsizei count, const GLfloat *value) { BEFORE(glUniform4fv); glUniform4fvp(location, count, value); GL_GET_ERROR(); - AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddp", - location, count, voidp_to_uint64(value)); + AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddF", + location, count, count * 4, voidp_to_uint64(value)); } void glUniform1i(GLint location, GLint v0) { @@ -1448,8 +1448,8 @@ void glUniform1iv(GLint location, GLsizei count, const GLint *value) { BEFORE(glUniform1iv); glUniform1ivp(location, count, value); GL_GET_ERROR(); - AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddp", - location, count, voidp_to_uint64(value)); + AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddD", + location, count, count * 1, voidp_to_uint64(value)); } void glUniform2iv(GLint location, GLsizei count, const GLint *value) { @@ -1457,8 +1457,8 @@ void glUniform2iv(GLint location, GLsizei count, const GLint *value) { BEFORE(glUniform2iv); glUniform2ivp(location, count, value); GL_GET_ERROR(); - AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddp", - location, count, voidp_to_uint64(value)); + AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddD", + location, count, count * 2, voidp_to_uint64(value)); } void glUniform3iv(GLint location, GLsizei count, const GLint *value) { @@ -1466,8 +1466,17 @@ void glUniform3iv(GLint location, GLsizei count, const GLint *value) { BEFORE(glUniform3iv); glUniform3ivp(location, count, value); GL_GET_ERROR(); - AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddp", - location, count, voidp_to_uint64(value)); + AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddD", + location, count, count * 3, voidp_to_uint64(value)); +} + +void glUniform4iv(GLint location, GLsizei count, const GLint *value) { + typedef void (*methodType)(GLint, GLsizei, const GLint *); + BEFORE(glUniform4iv); + glUniform4ivp(location, count, value); + GL_GET_ERROR(); + AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddD", + location, count, count * 4, voidp_to_uint64(value)); } void glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, @@ -1476,8 +1485,9 @@ void glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, BEFORE(glUniformMatrix2fv); glUniformMatrix2fvp(location, count, transpose, value); GL_GET_ERROR(); - AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddxp", - location, count, (uint64_t)(transpose), voidp_to_uint64(value)); + AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddxF", + location, count, (uint64_t)(transpose), count * 2 * 2, + voidp_to_uint64(value)); } void glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, @@ -1486,8 +1496,9 @@ void glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, BEFORE(glUniformMatrix3fv); glUniformMatrix3fvp(location, count, transpose, value); GL_GET_ERROR(); - AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddxp", - location, count, (uint64_t)(transpose), voidp_to_uint64(value)); + AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddxF", + location, count, (uint64_t)(transpose), count * 3 * 3, + voidp_to_uint64(value)); } void glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, @@ -1496,18 +1507,11 @@ void glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, BEFORE(glUniformMatrix4fv); glUniformMatrix4fvp(location, count, transpose, value); GL_GET_ERROR(); - AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddxp", - location, count, (uint64_t)(transpose), voidp_to_uint64(value)); + AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddxF", + location, count, (uint64_t)(transpose), count * 4 * 4, + voidp_to_uint64(value)); } -void glUniform4iv(GLint location, GLsizei count, const GLint *value) { - typedef void (*methodType)(GLint, GLsizei, const GLint *); - BEFORE(glUniform4iv); - glUniform4ivp(location, count, value); - GL_GET_ERROR(); - AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddp", - location, count, voidp_to_uint64(value)); -} void glUseProgram(GLuint program) { typedef void (*methodType)(GLuint);