nv50/ir/nir: fix ext_demote_to_helper_invocation
[mesa.git] / src / gallium / drivers / nouveau / nouveau_vp3_video.c
index d76d93241f4145da91f61b7b88a3b0399c59573d..b28d31e0079d536387df0b16b10c30b5bd34e48d 100644 (file)
 #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 **
@@ -87,7 +89,7 @@ nouveau_vp3_video_buffer_create(struct pipe_context *pipe,
       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)
@@ -96,7 +98,6 @@ nouveau_vp3_video_buffer_create(struct pipe_context *pipe,
    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;
@@ -139,8 +140,8 @@ nouveau_vp3_video_buffer_create(struct pipe_context *pipe,
          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])
@@ -351,6 +352,16 @@ nouveau_vp3_load_firmware(struct nouveau_vp3_decoder *dec,
    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)
 {
@@ -368,13 +379,7 @@ 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;
@@ -393,7 +398,10 @@ firmware_present(struct pipe_screen *pscreen, enum pipe_video_profile profile)
                          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);
@@ -483,7 +491,7 @@ nouveau_vp3_screen_get_video_param(struct pipe_screen *pscreen,
    }
 }
 
-boolean
+bool
 nouveau_vp3_screen_video_supported(struct pipe_screen *screen,
                                    enum pipe_format format,
                                    enum pipe_video_profile profile,