#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"
/* 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: */
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;
+ tmpl.swizzle_g = PIPE_SWIZZLE_Y; /* tmpl from Y plane is R16 */
+ extra = u_bit_scan(&free_slots);
+ sampler_views[extra] =
+ st->pipe->create_sampler_view(st->pipe, stObj->pt->next, &tmpl);
+ break;
case PIPE_FORMAT_IYUV:
/* we need two additional R8 views: */
tmpl.format = PIPE_FORMAT_R8_UNORM;
sampler_views[extra] =
st->pipe->create_sampler_view(st->pipe, stObj->pt->next->next, &tmpl);
break;
+ case PIPE_FORMAT_YUYV:
+ /* we need one additional BGRA8888 view: */
+ tmpl.format = PIPE_FORMAT_BGRA8888_UNORM;
+ tmpl.swizzle_b = PIPE_SWIZZLE_Z;
+ tmpl.swizzle_a = PIPE_SWIZZLE_W;
+ extra = u_bit_scan(&free_slots);
+ sampler_views[extra] =
+ st->pipe->create_sampler_view(st->pipe, stObj->pt->next, &tmpl);
+ break;
+ case PIPE_FORMAT_UYVY:
+ /* we need one additional RGBA8888 view: */
+ tmpl.format = PIPE_FORMAT_RGBA8888_UNORM;
+ tmpl.swizzle_b = PIPE_SWIZZLE_Z;
+ tmpl.swizzle_a = PIPE_SWIZZLE_W;
+ extra = u_bit_scan(&free_slots);
+ sampler_views[extra] =
+ st->pipe->create_sampler_view(st->pipe, stObj->pt->next, &tmpl);
+ break;
default:
break;
}
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);
}
}