st/mesa: only memset sampler when about to use it.
authorDave Airlie <airlied@redhat.com>
Sun, 15 May 2011 23:44:10 +0000 (09:44 +1000)
committerDave Airlie <airlied@redhat.com>
Wed, 18 May 2011 07:31:51 +0000 (17:31 +1000)
This function was taking a lot more CPU than required due to it memsetting
a bunch of memory that didn't require it from what I can see.

We should only memset here when we are about to fill out the sampler,
otherwise we end up doing a bunch of memsets for everytime this function
is called, basically setting 0 memory to 0.

Signed-off-by: Dave Airlie <airlied@redhat.com>
src/mesa/state_tracker/st_atom_sampler.c

index ccbd5489226989f7f573edf18b0bdc8767ab81c7..06024ad2657ce0b632a6be6605f73db61dbc13ae 100644 (file)
@@ -133,6 +133,8 @@ static void convert_sampler(struct st_context *st,
     }
 
     msamp = _mesa_get_samplerobj(st->ctx, texUnit);
+
+    memset(sampler, 0, sizeof(*sampler));
     sampler->wrap_s = gl_wrap_xlate(msamp->WrapS);
     sampler->wrap_t = gl_wrap_xlate(msamp->WrapT);
     sampler->wrap_r = gl_wrap_xlate(msamp->WrapR);
@@ -201,8 +203,6 @@ update_vertex_samplers(struct st_context *st)
    for (su = 0; su < st->ctx->Const.MaxVertexTextureImageUnits; su++) {
       struct pipe_sampler_state *sampler = st->state.vertex_samplers + su;
 
-      memset(sampler, 0, sizeof(*sampler));
-
       if (vprog->Base.SamplersUsed & (1 << su)) {
         GLuint texUnit;
 
@@ -232,7 +232,6 @@ update_fragment_samplers(struct st_context *st)
    for (su = 0; su < st->ctx->Const.MaxTextureImageUnits; su++) {
       struct pipe_sampler_state *sampler = st->state.samplers + su;
 
-      memset(sampler, 0, sizeof(*sampler));
 
       if (fprog->Base.SamplersUsed & (1 << su)) {
          GLuint texUnit;