diff options
author | Brian Paul <[email protected]> | 2012-08-09 10:14:51 -0600 |
---|---|---|
committer | Brian Paul <[email protected]> | 2012-08-16 08:58:55 -0600 |
commit | 50188adf7d4ca12488a3cb4b70ffdedea2e9c9b1 (patch) | |
tree | 29a1ded67ed9254a758df9c5f58aeeaf33ea2c71 /src/gallium | |
parent | d55e0f1ba05252af658ca084769a279c956575b9 (diff) |
svga: fix result==NULL logic in emit_fs_consts()
The previous test for result != NULL was kind of bogus since we dereferenced
the pointer earlier in the code. Now, check for result != NULL first, then
get the result->key info.
Also, remove the useless "offset +=" code at the end.
Diffstat (limited to 'src/gallium')
-rw-r--r-- | src/gallium/drivers/svga/svga_state_constants.c | 48 |
1 files changed, 25 insertions, 23 deletions
diff --git a/src/gallium/drivers/svga/svga_state_constants.c b/src/gallium/drivers/svga/svga_state_constants.c index a3d61fbbc71..a8711541776 100644 --- a/src/gallium/drivers/svga/svga_state_constants.c +++ b/src/gallium/drivers/svga/svga_state_constants.c @@ -262,7 +262,6 @@ static enum pipe_error emit_fs_consts(struct svga_context *svga, unsigned dirty) { const struct svga_shader_result *result = svga->state.hw_draw.fs; - const struct svga_fs_compile_key *key = &result->key.fkey; enum pipe_error ret = PIPE_OK; ret = emit_consts( svga, PIPE_SHADER_FRAGMENT ); @@ -273,30 +272,33 @@ emit_fs_consts(struct svga_context *svga, unsigned dirty) * doesn't have a 'result' struct. It should be fixed to avoid * this special case, but work around it with a NULL check: */ - if (result != NULL && key->num_unnormalized_coords) { - unsigned offset = result->shader->info.file_max[TGSI_FILE_CONSTANT] + 1; - int i; - - for (i = 0; i < key->num_textures; i++) { - if (key->tex[i].unnormalized) { - struct pipe_resource *tex = svga->curr.sampler_views[i]->texture; - float data[4]; - - data[0] = 1.0 / (float)tex->width0; - data[1] = 1.0 / (float)tex->height0; - data[2] = 1.0; - data[3] = 1.0; - - ret = emit_const( svga, - PIPE_SHADER_FRAGMENT, - key->tex[i].width_height_idx + offset, - data ); - if (ret != PIPE_OK) - return ret; + if (result) { + const struct svga_fs_compile_key *key = &result->key.fkey; + if (key->num_unnormalized_coords) { + const unsigned offset = + result->shader->info.file_max[TGSI_FILE_CONSTANT] + 1; + unsigned i; + + for (i = 0; i < key->num_textures; i++) { + if (key->tex[i].unnormalized) { + struct pipe_resource *tex = svga->curr.sampler_views[i]->texture; + float data[4]; + + data[0] = 1.0f / (float) tex->width0; + data[1] = 1.0f / (float) tex->height0; + data[2] = 1.0f; + data[3] = 1.0f; + + ret = emit_const(svga, + PIPE_SHADER_FRAGMENT, + key->tex[i].width_height_idx + offset, + data); + if (ret != PIPE_OK) { + return ret; + } + } } } - - offset += key->num_unnormalized_coords; } return PIPE_OK; |