[Mesa-dev] [PATCH 19/25] i965: Implement logic to set up and upload an image uniform.
Francisco Jerez
currojerez at riseup.net
Tue May 5 14:48:26 PDT 2015
---
src/mesa/drivers/dri/i965/brw_shader.cpp | 32 ++++++++++++++++++++++++++++++++
src/mesa/drivers/dri/i965/brw_shader.h | 2 ++
2 files changed, 34 insertions(+)
diff --git a/src/mesa/drivers/dri/i965/brw_shader.cpp b/src/mesa/drivers/dri/i965/brw_shader.cpp
index c1fd859..61ef0c0 100644
--- a/src/mesa/drivers/dri/i965/brw_shader.cpp
+++ b/src/mesa/drivers/dri/i965/brw_shader.cpp
@@ -1260,3 +1260,35 @@ backend_visitor::assign_common_binding_table_offsets(uint32_t next_binding_table
/* prog_data->base.binding_table.size will be set by brw_mark_surface_used. */
}
+
+void
+backend_visitor::setup_image_uniform_values(
+ const gl_uniform_storage *storage, const brw_image_param *image_params)
+{
+ const unsigned stage = _mesa_program_enum_to_shader_stage(prog->Target);
+
+ for (unsigned i = 0; i < MAX2(storage->array_elements, 1); i++) {
+ const unsigned image_idx = storage->image[stage].index + i;
+ const brw_image_param *param = &image_params[image_idx];
+
+ /* Upload the brw_image_param structure. The order is expected to match
+ * the BRW_IMAGE_PARAM_*_OFFSET defines.
+ */
+ setup_vector_uniform_values(
+ (const gl_constant_value *)¶m->surface_idx, 1);
+ setup_vector_uniform_values(
+ (const gl_constant_value *)param->offset, 2);
+ setup_vector_uniform_values(
+ (const gl_constant_value *)param->size, 3);
+ setup_vector_uniform_values(
+ (const gl_constant_value *)param->stride, 4);
+ setup_vector_uniform_values(
+ (const gl_constant_value *)param->tiling, 3);
+ setup_vector_uniform_values(
+ (const gl_constant_value *)param->swizzling, 2);
+
+ brw_mark_surface_used(
+ stage_prog_data,
+ stage_prog_data->binding_table.image_start + image_idx);
+ }
+}
diff --git a/src/mesa/drivers/dri/i965/brw_shader.h b/src/mesa/drivers/dri/i965/brw_shader.h
index 6aa7e09..f5f4517 100644
--- a/src/mesa/drivers/dri/i965/brw_shader.h
+++ b/src/mesa/drivers/dri/i965/brw_shader.h
@@ -261,6 +261,8 @@ public:
virtual void setup_vector_uniform_values(const gl_constant_value *values,
unsigned n) = 0;
+ void setup_image_uniform_values(const gl_uniform_storage *storage,
+ const struct brw_image_param *image_params);
};
uint32_t brw_texture_offset(int *offsets, unsigned num_components);
--
2.3.5
More information about the mesa-dev
mailing list