[Mesa-dev] [PATCH] mesa/arb_gpu_shader_fp64: add support for glGetUniformdv
Timothy Arceri
t_arceri at yahoo.com.au
Mon Jul 27 01:10:34 PDT 2015
Couple of comments below, otherwise Reviewed-by: Timothy Arceri
<t_arceri at yahoo.com.au>
On Mon, 2015-07-27 at 13:14 +1000, Dave Airlie wrote:
> From: Dave Airlie <airlied at redhat.com>
>
> This was missed when I did fp64, I've sent a piglit test to cover
> the case as well.
>
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
> src/mesa/main/uniform_query.cpp | 15 +++++++++++----
> src/mesa/main/uniforms.c | 9 ---------
> 2 files changed, 11 insertions(+), 13 deletions(-)
>
> diff --git a/src/mesa/main/uniform_query.cpp
> b/src/mesa/main/uniform_query.cpp
> index b5a94e9..5fb903a 100644
> --- a/src/mesa/main/uniform_query.cpp
> +++ b/src/mesa/main/uniform_query.cpp
> @@ -319,24 +319,31 @@ _mesa_get_uniform(struct gl_context *ctx, GLuint
> program, GLint location,
>
> return;
> }
> + if ((uni->type->base_type == GLSL_TYPE_DOUBLE &&
> + returnType != GLSL_TYPE_DOUBLE) ||
> + (uni->type->base_type != GLSL_TYPE_DOUBLE &&
> + returnType == GLSL_TYPE_DOUBLE)) {
> + _mesa_error( ctx, GL_INVALID_OPERATION,
> + "glGetnUniform*vARB(incompatible uniform types)");
We could be nice to the dev and add uniform vs return type to the error
message.
> + return;
> + }
>
> {
> unsigned elements = (uni->type->is_sampler())
> ? 1 : uni->type->components();
> + const int dmul = uni->type->base_type == GLSL_TYPE_DOUBLE ? 2 : 1;
>
> /* Calculate the source base address *BEFORE* modifying elements to
> * account for the size of the user's buffer.
> */
> const union gl_constant_value *const src =
> - &uni->storage[offset * elements];
> + &uni->storage[offset * elements * dmul];
>
> - assert(returnType == GLSL_TYPE_FLOAT || returnType == GLSL_TYPE_INT
> ||
> - returnType == GLSL_TYPE_UINT);
I guess you could have just added GLSL_TYPE_DOUBLE to the assert but I dont
feel to strongly about it.
> /* The three (currently) supported types all have the same size,
> * which is of course the same as their union. That'll change
> * with glGetUniformdv()...
> */
The above comment needs to be updated or maybe just removed.
> - unsigned bytes = sizeof(src[0]) * elements;
> + unsigned bytes = sizeof(src[0]) * elements * dmul;
> if (bufSize < 0 || bytes > (unsigned) bufSize) {
> _mesa_error( ctx, GL_INVALID_OPERATION,
> "glGetnUniform*vARB(out of bounds: bufSize is %d,"
> diff --git a/src/mesa/main/uniforms.c b/src/mesa/main/uniforms.c
> index 6ba746e..13bec88 100644
> --- a/src/mesa/main/uniforms.c
> +++ b/src/mesa/main/uniforms.c
> @@ -888,16 +888,7 @@ _mesa_GetnUniformdvARB(GLuint program, GLint location,
> {
> GET_CURRENT_CONTEXT(ctx);
>
> - (void) program;
> - (void) location;
> - (void) bufSize;
> - (void) params;
> -
> - /*
> _mesa_get_uniform(ctx, program, location, bufSize, GLSL_TYPE_DOUBLE,
> params);
> - */
> - _mesa_error(ctx, GL_INVALID_OPERATION, "glGetUniformdvARB"
> - "(GL_ARB_gpu_shader_fp64 not implemented)");
> }
>
> void GLAPIENTRY
More information about the mesa-dev
mailing list