*/
#include "pipe/p_context.h"
-#include "util/u_format.h"
+#include "util/format/u_format.h"
#include "util/u_inlines.h"
#include "main/context.h"
for (unsigned i = 0; i < views->count; ++i) {
struct st_sampler_view *stsv = &views->views[i];
if (stsv->view) {
- if (stsv->st != st) {
+ if (stsv->st && stsv->st != st) {
/* Transfer this reference to the zombie list. It will
* likely be freed when the zombie list is freed.
*/
if (srgb_skip_decode)
format = util_format_linear(format);
+ /* if resource format matches then YUV wasn't lowered */
+ if (format == stObj->pt->format)
+ return format;
+
/* Use R8_UNORM for video formats */
switch (format) {
case PIPE_FORMAT_NV12:
case PIPE_FORMAT_IYUV:
format = PIPE_FORMAT_R8_UNORM;
break;
+ case PIPE_FORMAT_P010:
+ case PIPE_FORMAT_P016:
+ format = PIPE_FORMAT_R16_UNORM;
+ break;
+ case PIPE_FORMAT_YUYV:
+ case PIPE_FORMAT_UYVY:
+ format = PIPE_FORMAT_R8G8_UNORM;
+ break;
+ case PIPE_FORMAT_AYUV:
+ format = PIPE_FORMAT_RGBA8888_UNORM;
+ break;
+ case PIPE_FORMAT_XYUV:
+ format = PIPE_FORMAT_RGBX8888_UNORM;
+ break;
default:
break;
}
templ.format = format;
- if (stObj->level_override) {
+ if (stObj->level_override >= 0) {
templ.u.tex.first_level = templ.u.tex.last_level = stObj->level_override;
} else {
templ.u.tex.first_level = stObj->base.MinLevel + stObj->base.BaseLevel;
templ.u.tex.last_level = last_level(stObj);
}
- if (stObj->layer_override) {
+ if (stObj->layer_override >= 0) {
templ.u.tex.first_layer = templ.u.tex.last_layer = stObj->layer_override;
} else {
templ.u.tex.first_layer = stObj->base.MinLayer;
assert(!check_sampler_swizzle(st, stObj, view, glsl130_or_later));
assert(get_sampler_view_format(st, stObj, srgb_skip_decode) == view->format);
assert(gl_target_to_pipe(stObj->base.Target) == view->target);
- assert(stObj->level_override ||
+ assert(stObj->level_override >= 0 ||
stObj->base.MinLevel + stObj->base.BaseLevel == view->u.tex.first_level);
- assert(stObj->level_override || last_level(stObj) == view->u.tex.last_level);
- assert(stObj->layer_override || stObj->base.MinLayer == view->u.tex.first_layer);
- assert(stObj->layer_override || last_layer(stObj) == view->u.tex.last_layer);
- assert(!stObj->layer_override ||
+ assert(stObj->level_override >= 0 || last_level(stObj) == view->u.tex.last_level);
+ assert(stObj->layer_override >= 0 || stObj->base.MinLayer == view->u.tex.first_layer);
+ assert(stObj->layer_override >= 0 || last_layer(stObj) == view->u.tex.last_layer);
+ assert(stObj->layer_override < 0 ||
(stObj->layer_override == view->u.tex.first_layer &&
stObj->layer_override == view->u.tex.last_layer));
return view;