st/mesa: do not clear NewDriverState for inactive states
[mesa.git] / src / mesa / state_tracker / st_atom_texture.c
index 8a881c24fb39597aece50cf12953ebe9ea5c5eec..5a0f91ccb1403ee50a90cc3c88775034e9abe17b 100644 (file)
@@ -47,7 +47,7 @@
 #include "st_format.h"
 #include "st_cb_texture.h"
 #include "pipe/p_context.h"
-#include "util/u_format.h"
+#include "util/format/u_format.h"
 #include "util/u_inlines.h"
 #include "cso_cache/cso_context.h"
 
@@ -182,6 +182,10 @@ update_textures(struct st_context *st,
       /* use original view as template: */
       tmpl = *sampler_views[unit];
 
+      /* if resource format matches then YUV wasn't lowered */
+      if (st_get_view_format(stObj) == stObj->pt->format)
+         continue;
+
       switch (st_get_view_format(stObj)) {
       case PIPE_FORMAT_NV12:
          /* we need one additional R8G8 view: */
@@ -191,6 +195,7 @@ update_textures(struct st_context *st,
          sampler_views[extra] =
                st->pipe->create_sampler_view(st->pipe, stObj->pt->next, &tmpl);
          break;
+      case PIPE_FORMAT_P010:
       case PIPE_FORMAT_P016:
          /* we need one additional R16G16 view: */
          tmpl.format = PIPE_FORMAT_RG1616_UNORM;
@@ -262,8 +267,10 @@ st_update_vertex_textures(struct st_context *st)
    const struct gl_context *ctx = st->ctx;
 
    if (ctx->Const.Program[MESA_SHADER_VERTEX].MaxTextureImageUnits > 0) {
-      update_textures_local(st, PIPE_SHADER_VERTEX,
-                            ctx->VertexProgram._Current);
+      update_textures(st,
+                      PIPE_SHADER_VERTEX,
+                      ctx->VertexProgram._Current,
+                      st->state.vert_sampler_views);
    }
 }