diff options
author | Kenneth Graunke <[email protected]> | 2011-08-15 14:18:16 -0700 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2011-08-19 23:30:45 -0700 |
commit | 01d81dedc795005ed235856ce762bb1981655716 (patch) | |
tree | 8e7922b7ae68f29dc943f569376a38b525f9e3aa /src/mesa/main | |
parent | 07e9b9049f94ceb443eac1206cc3f9e1e51ac6c1 (diff) |
mesa, glsl_to_tgsi: Add new gl_context::NativeIntegers flag.
Previously, native integer support was based on whether the driver
advertised GLSL 1.30 or not. However, drivers that natively support
integers may wish to do so for older GLSL versions as well. Adding this
new opt-in flag allows them to do so.
Currently disabled by default on all drivers, which was the existing
behavior (no drivers currently implement GLSL 1.30).
Fixes piglit tests on i965 with INTEL_GLSL_VERSION=130 set:
- spec/glsl-1.10/fs-uniform-int-110.shader_test
- spec/glsl-1.30/fs-uniform-int-130.shader_test
(it was doubly converting the data)
Signed-off-by: Kenneth Graunke <[email protected]>
Reviewed-by: Ian Romanick <[email protected]>
Reviewed-by: Eric Anholt <[email protected]>
Diffstat (limited to 'src/mesa/main')
-rw-r--r-- | src/mesa/main/mtypes.h | 6 | ||||
-rw-r--r-- | src/mesa/main/uniforms.c | 18 |
2 files changed, 15 insertions, 9 deletions
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 2d5f44c1e7b..8b3650321db 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -2717,6 +2717,12 @@ struct gl_constants GLuint GLSLVersion; /**< GLSL version supported (ex: 120 = 1.20) */ + /** + * Does the driver support real 32-bit integers? (Otherwise, integers are + * simulated via floats.) + */ + GLboolean NativeIntegers; + /** Which texture units support GL_ATI_envmap_bumpmap as targets */ GLbitfield SupportedBumpUnits; diff --git a/src/mesa/main/uniforms.c b/src/mesa/main/uniforms.c index 1329af4cd7e..cda840fe2d2 100644 --- a/src/mesa/main/uniforms.c +++ b/src/mesa/main/uniforms.c @@ -454,9 +454,9 @@ get_uniform(struct gl_context *ctx, GLuint program, GLint location, for (i = 0; i < rows; i++) { const int base = paramPos + offset + i; for (j = 0; j < cols; j++ ) { - params[k++] = ctx->Const.GLSLVersion <= 120 ? - (GLint) prog->Parameters->ParameterValues[base][j].f : - prog->Parameters->ParameterValues[base][j].i; + params[k++] = ctx->Const.NativeIntegers ? + prog->Parameters->ParameterValues[base][j].i : + (GLint) prog->Parameters->ParameterValues[base][j].f; } } } @@ -468,9 +468,9 @@ get_uniform(struct gl_context *ctx, GLuint program, GLint location, for (i = 0; i < rows; i++) { const int base = paramPos + offset + i; for (j = 0; j < cols; j++ ) { - params[k++] = ctx->Const.GLSLVersion <= 120 ? - (GLuint) prog->Parameters->ParameterValues[base][j].f : - prog->Parameters->ParameterValues[base][j].u; + params[k++] = ctx->Const.NativeIntegers ? + prog->Parameters->ParameterValues[base][j].u : + (GLuint) prog->Parameters->ParameterValues[base][j].f; } } } @@ -750,7 +750,7 @@ set_program_uniform(struct gl_context *ctx, struct gl_program *program, if (basicType == GL_INT) { const GLint *iValues = ((const GLint *) values) + k * elems; for (i = 0; i < elems; i++) { - if (ctx->Const.GLSLVersion <= 120) + if (!ctx->Const.NativeIntegers) uniformVal[i].f = (GLfloat) iValues[i]; else uniformVal[i].i = iValues[i]; @@ -759,7 +759,7 @@ set_program_uniform(struct gl_context *ctx, struct gl_program *program, else if (basicType == GL_UNSIGNED_INT) { const GLuint *iValues = ((const GLuint *) values) + k * elems; for (i = 0; i < elems; i++) { - if (ctx->Const.GLSLVersion <= 120) + if (!ctx->Const.NativeIntegers) uniformVal[i].f = (GLfloat)(GLuint) iValues[i]; else uniformVal[i].u = iValues[i]; @@ -781,7 +781,7 @@ set_program_uniform(struct gl_context *ctx, struct gl_program *program, else uniformVal[i].b = uniformVal[i].u ? 1 : 0; - if (ctx->Const.GLSLVersion <= 120) + if (!ctx->Const.NativeIntegers) uniformVal[i].f = uniformVal[i].b ? 1.0f : 0.0f; } } |