X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fstate_tracker%2Fst_pbo.c;h=ee5ee2df59868da854e9ddf9ac511b4e68ff0af8;hb=5e4d69ec786e56794a995be869b5a9b80d050f2d;hp=af6aa50fa9ed5ba07d7c3b0da71b15f75f1cba0b;hpb=a01ad3110a92e88f815242b59ad1da6d2623decc;p=mesa.git diff --git a/src/mesa/state_tracker/st_pbo.c b/src/mesa/state_tracker/st_pbo.c index af6aa50fa9e..ee5ee2df598 100644 --- a/src/mesa/state_tracker/st_pbo.c +++ b/src/mesa/state_tracker/st_pbo.c @@ -33,16 +33,17 @@ #include "state_tracker/st_pbo.h" #include "state_tracker/st_cb_bufferobjects.h" -#include "nir_builder.h" #include "pipe/p_context.h" #include "pipe/p_defines.h" #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" +#include "compiler/nir/nir_builder.h" + /* Conversion to apply in the fragment shader. */ enum st_pbo_conversion { ST_PBO_CONVERT_NONE = 0, @@ -218,7 +219,7 @@ st_pbo_draw(struct st_context *st, const struct st_pbo_addresses *addr, /* 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; @@ -245,14 +246,15 @@ st_pbo_draw(struct st_context *st, const struct st_pbo_addresses *addr, 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); } @@ -446,6 +448,7 @@ create_fs_nir(struct st_context *st, /* 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 = @@ -495,6 +498,7 @@ create_fs_nir(struct st_context *st, 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); @@ -512,14 +516,23 @@ create_fs_nir(struct st_context *st, 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; @@ -534,7 +547,9 @@ create_fs_nir(struct st_context *st, 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); @@ -543,6 +558,7 @@ create_fs_nir(struct st_context *st, 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 { @@ -814,7 +830,7 @@ st_destroy_pbo_helpers(struct st_context *st) 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; } } @@ -822,19 +838,19 @@ st_destroy_pbo_helpers(struct st_context *st) 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; } }