#include "util/u_memory.h"
#include "util/u_math.h"
#include "util/u_rect.h"
+#include "util/u_upload_mgr.h"
#include "vl_types.h"
#include "vl_vertex_buffers.h"
* t = frac(temp)
* vtex = floor(i_vtex)/i_size
*/
- ureg_SUB(shader, ureg_writemask(t_array[21], TGSI_WRITEMASK_XY),
- i_vtex, half_pixel);
+ ureg_ADD(shader, ureg_writemask(t_array[21], TGSI_WRITEMASK_XY),
+ i_vtex, ureg_negate(half_pixel));
ureg_MUL(shader, ureg_writemask(t_array[22], TGSI_WRITEMASK_XY),
ureg_src(t_array[21]), ureg_imm2f(shader, video_width, video_height));
ureg_FRC(shader, ureg_writemask(t, TGSI_WRITEMASK_XY),
{
struct pipe_rasterizer_state rs_state;
struct pipe_blend_state blend;
- struct vertex2f *offsets = NULL;
+ struct vertex2f offsets[16];
struct pipe_sampler_state sampler;
struct pipe_vertex_element ve;
unsigned i;
if (!filter->ves)
goto error_ves;
- offsets = MALLOC(sizeof(struct vertex2f) * 16);
- if (!offsets)
- goto error_offsets;
-
offsets[0].x = -1.0f; offsets[0].y = -1.0f;
offsets[1].x = 0.0f; offsets[1].y = -1.0f;
offsets[2].x = 1.0f; offsets[2].y = -1.0f;
pipe->delete_vs_state(pipe, filter->vs);
error_vs:
-
-error_offsets:
pipe->delete_vertex_elements_state(pipe, filter->ves);
error_ves:
struct pipe_framebuffer_state fb_state;
struct pipe_scissor_state scissor;
union pipe_color_union clear_color;
- struct pipe_transfer *buf_transfer;
- struct pipe_resource *surface_size;
+
assert(filter && src && dst);
if (dst_clip) {
clear_color.f[0] = clear_color.f[1] = 0.0f;
clear_color.f[2] = clear_color.f[3] = 0.0f;
- surface_size = pipe_buffer_create
- (
- filter->pipe->screen,
- PIPE_BIND_CONSTANT_BUFFER,
- PIPE_USAGE_DEFAULT,
- 2*sizeof(float)
- );
-
memset(&viewport, 0, sizeof(viewport));
if(dst_area){
}
viewport.scale[2] = 1;
- float *ptr = pipe_buffer_map(filter->pipe, surface_size,
- PIPE_TRANSFER_WRITE | PIPE_TRANSFER_DISCARD_RANGE,
- &buf_transfer);
+ struct pipe_constant_buffer cb = {};
+ float *ptr;
+
+ u_upload_alloc(filter->pipe->const_uploader, 0, 2 * sizeof(float), 256,
+ &cb.buffer_offset, &cb.buffer, (void**)&ptr);
+ cb.buffer_size = 2 * sizeof(float);
ptr[0] = 0.5f/viewport.scale[0];
ptr[1] = 0.5f/viewport.scale[1];
-
- pipe_buffer_unmap(filter->pipe, buf_transfer);
+ u_upload_unmap(filter->pipe->const_uploader);
memset(&fb_state, 0, sizeof(fb_state));
fb_state.width = dst->width;
filter->pipe->set_scissor_states(filter->pipe, 0, 1, &scissor);
filter->pipe->clear_render_target(filter->pipe, dst, &clear_color,
- 0, 0, dst->width, dst->height);
- pipe_set_constant_buffer(filter->pipe, PIPE_SHADER_FRAGMENT, 0, surface_size);
+ 0, 0, dst->width, dst->height, false);
+ filter->pipe->set_constant_buffer(filter->pipe, PIPE_SHADER_FRAGMENT,
+ 0, &cb);
filter->pipe->bind_rasterizer_state(filter->pipe, filter->rs_state);
filter->pipe->bind_blend_state(filter->pipe, filter->blend);
filter->pipe->bind_sampler_states(filter->pipe, PIPE_SHADER_FRAGMENT,