draw: don't crash if GS doesn't emit anything
[mesa.git] / src / gallium / auxiliary / postprocess / pp_mlaa.c
index 5708687a1c2d44313e06fe300af4427e92adf8b9..6d9fa9aa3ddcc89511f747a59331a9f2d5a511f6 100644 (file)
@@ -38,8 +38,8 @@
  * policies, either expressed or implied, of the copyright holders.
  */
 
-#include <stdio.h>
-#include <string.h>
+#include "pipe/p_compiler.h"
+
 #include "postprocess/postprocess.h"
 #include "postprocess/pp_mlaa.h"
 #include "postprocess/pp_filters.h"
@@ -47,6 +47,8 @@
 #include "util/u_box.h"
 #include "util/u_sampler.h"
 #include "util/u_inlines.h"
+#include "util/u_memory.h"
+#include "util/u_string.h"
 #include "pipe/p_screen.h"
 
 #define IMM_SPACE 80
@@ -89,16 +91,16 @@ pp_jimenezmlaa_run(struct pp_queue_t *ppq, struct pipe_resource *in,
    /* Init the pixel size constant */
    if (dimensions[0] != p->framebuffer.width ||
        dimensions[1] != p->framebuffer.height) {
-      constants[0] = 1.0 / p->framebuffer.width;
-      constants[1] = 1.0 / p->framebuffer.height;
+      constants[0] = 1.0f / p->framebuffer.width;
+      constants[1] = 1.0f / p->framebuffer.height;
 
       up_consts(p->pipe);
       dimensions[0] = p->framebuffer.width;
       dimensions[1] = p->framebuffer.height;
    }
 
-   p->pipe->set_constant_buffer(p->pipe, PIPE_SHADER_VERTEX, 0, constbuf);
-   p->pipe->set_constant_buffer(p->pipe, PIPE_SHADER_FRAGMENT, 0, constbuf);
+   cso_set_constant_buffer_resource(p->cso, PIPE_SHADER_VERTEX, 0, constbuf);
+   cso_set_constant_buffer_resource(p->cso, PIPE_SHADER_FRAGMENT, 0, constbuf);
 
    mstencil.stencil[0].enabled = 1;
    mstencil.stencil[0].valuemask = mstencil.stencil[0].writemask = ~0;
@@ -123,9 +125,9 @@ pp_jimenezmlaa_run(struct pp_queue_t *ppq, struct pipe_resource *in,
    p->pipe->clear(p->pipe, PIPE_CLEAR_STENCIL | PIPE_CLEAR_COLOR,
                   &p->clear_color, 0, 0);
 
-   cso_single_sampler(p->cso, 0, &p->sampler_point);
-   cso_single_sampler_done(p->cso);
-   cso_set_fragment_sampler_views(p->cso, 1, &p->view);
+   cso_single_sampler(p->cso, PIPE_SHADER_FRAGMENT, 0, &p->sampler_point);
+   cso_single_sampler_done(p->cso, PIPE_SHADER_FRAGMENT);
+   cso_set_sampler_views(p->cso, PIPE_SHADER_FRAGMENT, 1, &p->view);
 
    cso_set_vertex_shader_handle(p->cso, ppq->shaders[n][1]);    /* offsetvs */
    cso_set_fragment_shader_handle(p->cso, ppq->shaders[n][2]);
@@ -150,13 +152,13 @@ pp_jimenezmlaa_run(struct pp_queue_t *ppq, struct pipe_resource *in,
 
    pp_filter_set_clear_fb(p);
 
-   cso_single_sampler(p->cso, 0, &p->sampler_point);
-   cso_single_sampler(p->cso, 1, &p->sampler_point);
-   cso_single_sampler(p->cso, 2, &p->sampler);
-   cso_single_sampler_done(p->cso);
+   cso_single_sampler(p->cso, PIPE_SHADER_FRAGMENT, 0, &p->sampler_point);
+   cso_single_sampler(p->cso, PIPE_SHADER_FRAGMENT, 1, &p->sampler_point);
+   cso_single_sampler(p->cso, PIPE_SHADER_FRAGMENT, 2, &p->sampler);
+   cso_single_sampler_done(p->cso, PIPE_SHADER_FRAGMENT);
 
    arr[0] = p->view;
-   cso_set_fragment_sampler_views(p->cso, 3, arr);
+   cso_set_sampler_views(p->cso, PIPE_SHADER_FRAGMENT, 3, arr);
 
    cso_set_vertex_shader_handle(p->cso, ppq->shaders[n][0]);    /* passvs */
    cso_set_fragment_shader_handle(p->cso, ppq->shaders[n][3]);
@@ -176,17 +178,18 @@ pp_jimenezmlaa_run(struct pp_queue_t *ppq, struct pipe_resource *in,
    /* Blit the input to the output */
    util_blit_pixels(p->blitctx, in, 0, 0, 0,
                     w, h, 0, p->framebuffer.cbufs[0],
-                    0, 0, w, h, 0, PIPE_TEX_MIPFILTER_NEAREST);
+                    0, 0, w, h, 0, PIPE_TEX_MIPFILTER_NEAREST,
+                    TGSI_WRITEMASK_XYZW, 0);
 
    u_sampler_view_default_template(&v_tmp, in, in->format);
    arr[0] = p->pipe->create_sampler_view(p->pipe, in, &v_tmp);
 
-   cso_single_sampler(p->cso, 0, &p->sampler_point);
-   cso_single_sampler(p->cso, 1, &p->sampler_point);
-   cso_single_sampler_done(p->cso);
+   cso_single_sampler(p->cso, PIPE_SHADER_FRAGMENT, 0, &p->sampler_point);
+   cso_single_sampler(p->cso, PIPE_SHADER_FRAGMENT, 1, &p->sampler_point);
+   cso_single_sampler_done(p->cso, PIPE_SHADER_FRAGMENT);
 
    arr[1] = p->view;
-   cso_set_fragment_sampler_views(p->cso, 2, arr);
+   cso_set_sampler_views(p->cso, PIPE_SHADER_FRAGMENT, 2, arr);
 
    cso_set_vertex_shader_handle(p->cso, ppq->shaders[n][1]);    /* offsetvs */
    cso_set_fragment_shader_handle(p->cso, ppq->shaders[n][4]);
@@ -210,9 +213,7 @@ pp_jimenezmlaa_init_run(struct pp_queue_t *ppq, unsigned int n,
 
    struct pipe_box box;
    struct pipe_resource res;
-
-   char *tmp_text = calloc(sizeof(blend2fs_1) + sizeof(blend2fs_2) +
-                           IMM_SPACE, sizeof(char));
+   char *tmp_text;
 
    constbuf = pipe_buffer_create(ppq->p->screen, PIPE_BIND_CONSTANT_BUFFER,
                                  PIPE_USAGE_STATIC, sizeof(constants));
@@ -224,13 +225,16 @@ pp_jimenezmlaa_init_run(struct pp_queue_t *ppq, unsigned int n,
 
    pp_debug("mlaa: using %u max search steps\n", val);
 
+   tmp_text = CALLOC(sizeof(blend2fs_1) + sizeof(blend2fs_2) +
+                     IMM_SPACE, sizeof(char));
+
    if (!tmp_text) {
       pp_debug("Failed to allocate shader space\n");
       return;
    }
-   sprintf(tmp_text, "%s"
-           "IMM FLT32 {    %.8f,     0.0000,     0.0000,     0.0000}\n"
-           "%s\n", blend2fs_1, (float) val, blend2fs_2);
+   util_sprintf(tmp_text, "%s"
+                "IMM FLT32 {    %.8f,     0.0000,     0.0000,     0.0000}\n"
+                "%s\n", blend2fs_1, (float) val, blend2fs_2);
 
    memset(&res, 0, sizeof(res));
 
@@ -267,7 +271,7 @@ pp_jimenezmlaa_init_run(struct pp_queue_t *ppq, unsigned int n,
    ppq->shaders[n][4] = pp_tgsi_to_state(ppq->p->pipe, neigh3fs, false,
                                          "neigh3fs");
 
-   free(tmp_text);
+   FREE(tmp_text);
 }
 
 /** Short wrapper to init the depth version. */