#include <stdio.h>
#include <fcntl.h>
+#include <nvif/class.h>
+
#include "nouveau_screen.h"
#include "nouveau_context.h"
#include "nouveau_vp3_video.h"
#include "util/u_video.h"
-#include "util/u_format.h"
+#include "util/format/u_format.h"
#include "util/u_sampler.h"
static struct pipe_sampler_view **
return vl_video_buffer_create(pipe, templat);
assert(templat->interlaced);
- assert(templat->chroma_format == PIPE_VIDEO_CHROMA_FORMAT_420);
+ assert(pipe_format_to_chroma_format(templat->buffer_format) == PIPE_VIDEO_CHROMA_FORMAT_420);
buffer = CALLOC_STRUCT(nouveau_vp3_video_buffer);
if (!buffer)
buffer->base.buffer_format = templat->buffer_format;
buffer->base.context = pipe;
buffer->base.destroy = nouveau_vp3_video_buffer_destroy;
- buffer->base.chroma_format = templat->chroma_format;
buffer->base.width = templat->width;
buffer->base.height = templat->height;
buffer->base.get_sampler_view_planes = nouveau_vp3_video_buffer_sampler_view_planes;
goto error;
for (j = 0; j < nr_components; ++j, ++component) {
- sv_templ.swizzle_r = sv_templ.swizzle_g = sv_templ.swizzle_b = PIPE_SWIZZLE_RED + j;
- sv_templ.swizzle_a = PIPE_SWIZZLE_ONE;
+ sv_templ.swizzle_r = sv_templ.swizzle_g = sv_templ.swizzle_b = PIPE_SWIZZLE_X + j;
+ sv_templ.swizzle_a = PIPE_SWIZZLE_1;
buffer->sampler_view_components[component] = pipe->create_sampler_view(pipe, res, &sv_templ);
if (!buffer->sampler_view_components[component])
return 0;
}
+static const struct nouveau_mclass
+nouveau_decoder_msvld[] = {
+ { G98_MSVLD, -1 },
+ { IGT21A_MSVLD, -1 },
+ { GT212_MSVLD, -1 },
+ { GF100_MSVLD, -1 },
+ { GK104_MSVLD, -1 },
+ {}
+};
+
static int
firmware_present(struct pipe_screen *pscreen, enum pipe_video_profile profile)
{
struct nvc0_fifo nvc0_args = {};
struct nve0_fifo nve0_args = {.engine = NVE0_FIFO_ENGINE_BSP};
void *data = NULL;
- int size, oclass;
- if (chipset < 0xc0)
- oclass = 0x85b1;
- else if (chipset < 0xe0)
- oclass = 0x90b1;
- else
- oclass = 0x95b1;
+ int size;
if (chipset < 0xc0) {
data = &nv04_data;
data, size, &channel);
if (channel) {
- nouveau_object_new(channel, 0, oclass, NULL, 0, &bsp);
+ ret = nouveau_object_mclass(channel, nouveau_decoder_msvld);
+ if (ret >= 0)
+ nouveau_object_new(channel, 0, nouveau_decoder_msvld[ret].oclass,
+ NULL, 0, &bsp);
if (bsp)
screen->firmware_info.profiles_present |= 1;
nouveau_object_del(&bsp);
}
}
-boolean
+bool
nouveau_vp3_screen_video_supported(struct pipe_screen *screen,
enum pipe_format format,
enum pipe_video_profile profile,