#include "pipe/p_screen.h"
#include "cso_cache/cso_context.h"
#include "tgsi/tgsi_ureg.h"
-#include "util/u_format.h"
+#include "util/format/u_format.h"
#include "util/u_inlines.h"
#include "util/u_upload_mgr.h"
/* Upload vertices */
{
struct pipe_vertex_buffer vbo = {0};
- struct pipe_vertex_element velem;
+ struct cso_velems_state velem;
float x0 = (float) addr->xoffset / surface_width * 2.0f - 1.0f;
float y0 = (float) addr->yoffset / surface_height * 2.0f - 1.0f;
u_upload_unmap(st->pipe->stream_uploader);
- velem.src_offset = 0;
- velem.instance_divisor = 0;
- velem.vertex_buffer_index = 0;
- velem.src_format = PIPE_FORMAT_R32G32_FLOAT;
+ velem.count = 1;
+ velem.velems[0].src_offset = 0;
+ velem.velems[0].instance_divisor = 0;
+ velem.velems[0].vertex_buffer_index = 0;
+ velem.velems[0].src_format = PIPE_FORMAT_R32G32_FLOAT;
- cso_set_vertex_elements(cso, 1, &velem);
+ cso_set_vertex_elements(cso, &velem);
- cso_set_vertex_buffers(cso, velem.vertex_buffer_index, 1, &vbo);
+ cso_set_vertex_buffers(cso, 0, 1, &vbo);
pipe_resource_reference(&vbo.buffer.resource, NULL);
}
/* param = [ -xoffset + skip_pixels, -yoffset, stride, image_height ] */
nir_variable *param_var =
nir_variable_create(b.shader, nir_var_uniform, glsl_vec4_type(), "param");
+ b.shader->num_uniforms += 4;
nir_ssa_def *param = nir_load_var(&b, param_var);
nir_variable *fragcoord =
nir_variable *layer_offset_var =
nir_variable_create(b.shader, nir_var_uniform,
glsl_int_type(), "layer_offset");
+ b.shader->num_uniforms += 1;
layer_offset_var->data.driver_location = 4;
nir_ssa_def *layer_offset = nir_load_var(&b, layer_offset_var);
nir_variable *tex_var =
nir_variable_create(b.shader, nir_var_uniform,
sampler_type_for_target(target), "tex");
- nir_tex_instr *tex = nir_tex_instr_create(b.shader, 1);
+ tex_var->data.explicit_binding = true;
+ tex_var->data.binding = 0;
+
+ nir_deref_instr *tex_deref = nir_build_deref_var(&b, tex_var);
+
+ nir_tex_instr *tex = nir_tex_instr_create(b.shader, 3);
tex->op = nir_texop_txf;
tex->sampler_dim = glsl_get_sampler_dim(tex_var->type);
tex->coord_components =
glsl_get_sampler_coordinate_components(tex_var->type);
tex->dest_type = nir_type_float;
- tex->src[0].src_type = nir_tex_src_coord;
- tex->src[0].src = nir_src_for_ssa(texcoord);
+ tex->src[0].src_type = nir_tex_src_texture_deref;
+ tex->src[0].src = nir_src_for_ssa(&tex_deref->dest.ssa);
+ tex->src[1].src_type = nir_tex_src_sampler_deref;
+ tex->src[1].src = nir_src_for_ssa(&tex_deref->dest.ssa);
+ tex->src[2].src_type = nir_tex_src_coord;
+ tex->src[2].src = nir_src_for_ssa(texcoord);
nir_ssa_dest_init(&tex->instr, &tex->dest, 4, 32, NULL);
nir_builder_instr_insert(&b, &tex->instr);
nir_ssa_def *result = &tex->dest.ssa;
nir_variable_create(b.shader, nir_var_uniform,
glsl_image_type(GLSL_SAMPLER_DIM_BUF, false,
GLSL_TYPE_FLOAT), "img");
- img_var->data.image.access = ACCESS_NON_READABLE;
+ img_var->data.access = ACCESS_NON_READABLE;
+ img_var->data.explicit_binding = true;
+ img_var->data.binding = 0;
nir_deref_instr *img_deref = nir_build_deref_var(&b, img_var);
nir_intrinsic_instr *intrin =
nir_intrinsic_instr_create(b.shader, nir_intrinsic_image_deref_store);
nir_src_for_ssa(nir_vec4(&b, pbo_addr, zero, zero, zero));
intrin->src[2] = nir_src_for_ssa(zero);
intrin->src[3] = nir_src_for_ssa(result);
+ intrin->src[4] = nir_src_for_ssa(nir_imm_int(&b, 0));
intrin->num_components = 4;
nir_builder_instr_insert(&b, &intrin->instr);
} else {
for (i = 0; i < ARRAY_SIZE(st->pbo.upload_fs); ++i) {
if (st->pbo.upload_fs[i]) {
- cso_delete_fragment_shader(st->cso_context, st->pbo.upload_fs[i]);
+ st->pipe->delete_fs_state(st->pipe, st->pbo.upload_fs[i]);
st->pbo.upload_fs[i] = NULL;
}
}
for (i = 0; i < ARRAY_SIZE(st->pbo.download_fs); ++i) {
for (unsigned j = 0; j < ARRAY_SIZE(st->pbo.download_fs[0]); ++j) {
if (st->pbo.download_fs[i][j]) {
- cso_delete_fragment_shader(st->cso_context, st->pbo.download_fs[i][j]);
+ st->pipe->delete_fs_state(st->pipe, st->pbo.download_fs[i][j]);
st->pbo.download_fs[i][j] = NULL;
}
}
}
if (st->pbo.gs) {
- cso_delete_geometry_shader(st->cso_context, st->pbo.gs);
+ st->pipe->delete_gs_state(st->pipe, st->pbo.gs);
st->pbo.gs = NULL;
}
if (st->pbo.vs) {
- cso_delete_vertex_shader(st->cso_context, st->pbo.vs);
+ st->pipe->delete_vs_state(st->pipe, st->pbo.vs);
st->pbo.vs = NULL;
}
}