Merge branch 'glsl-to-tgsi'
[mesa.git] / src / gallium / drivers / nvfx / nvfx_screen.c
index d880b12fcaa2101decc5868d318afd0bbb3a81e6..0e8f96772c696ad42ce1fc3fef191cb0d6d38ccb 100644 (file)
@@ -3,6 +3,8 @@
 #include "util/u_format.h"
 #include "util/u_format_s3tc.h"
 #include "util/u_simple_screen.h"
+#include "vl/vl_decoder.h"
+#include "vl/vl_video_buffer.h"
 
 #include "nouveau/nouveau_screen.h"
 #include "nouveau/nv_object.xml.h"
@@ -33,6 +35,9 @@ nvfx_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
                return 1;
        case PIPE_CAP_GLSL:
                return 1;
+       case PIPE_CAP_SM3:
+               /* TODO: >= nv4x support Shader Model 3.0 */
+               return 0;
        case PIPE_CAP_ANISOTROPIC_FILTER:
                return 1;
        case PIPE_CAP_POINT_SPRITE:
@@ -208,6 +213,24 @@ nvfx_screen_get_paramf(struct pipe_screen *pscreen, enum pipe_cap param)
        }
 }
 
+static int
+nvfx_screen_get_video_param(struct pipe_screen *screen,
+                               enum pipe_video_profile profile,
+                               enum pipe_video_cap param)
+{
+       switch (param) {
+       case PIPE_VIDEO_CAP_SUPPORTED:
+               return vl_profile_supported(screen, profile);
+       case PIPE_VIDEO_CAP_NPOT_TEXTURES:
+               return 0;
+       case PIPE_VIDEO_CAP_MAX_WIDTH:
+       case PIPE_VIDEO_CAP_MAX_HEIGHT:
+               return vl_video_buffer_max_size(screen);
+       default:
+               return 0;
+       }
+}
+
 static boolean
 nvfx_screen_is_format_supported(struct pipe_screen *pscreen,
                                     enum pipe_format format,
@@ -306,6 +329,7 @@ nvfx_screen_destroy(struct pipe_screen *pscreen)
        nouveau_notifier_free(&screen->sync);
        nouveau_grobj_free(&screen->eng3d);
        nvfx_screen_surface_takedown(pscreen);
+       nouveau_bo_ref(NULL, &screen->fence);
 
        nouveau_screen_fini(&screen->base);
 
@@ -467,9 +491,17 @@ nvfx_screen_create(struct pipe_winsys *ws, struct nouveau_device *dev)
        pscreen->get_param = nvfx_screen_get_param;
        pscreen->get_shader_param = nvfx_screen_get_shader_param;
        pscreen->get_paramf = nvfx_screen_get_paramf;
+       pscreen->get_video_param = nvfx_screen_get_video_param;
        pscreen->is_format_supported = nvfx_screen_is_format_supported;
+       pscreen->is_video_format_supported = vl_video_buffer_is_format_supported;
        pscreen->context_create = nvfx_create;
 
+       ret = nouveau_bo_new(dev, NOUVEAU_BO_VRAM, 0, 4096, &screen->fence);
+       if (ret) {
+               nvfx_screen_destroy(pscreen);
+               return NULL;
+       }
+
        switch (dev->chipset & 0xf0) {
        case 0x30:
                if (NV30_3D_CHIPSET_3X_MASK & (1 << (dev->chipset & 0x0f)))