From 342b7ce7d4383db3f956e207f189376a94b359fe Mon Sep 17 00:00:00 2001 From: Francisco Jerez Date: Fri, 22 Nov 2013 16:08:12 -0800 Subject: i965: Allocate binding table space for shader images. v2: Bump the number of supported image uniforms to 32 (Ken). Reviewed-by: Paul Berry Reviewed-by: Kenneth Graunke --- src/mesa/drivers/dri/i965/brw_context.h | 5 +++++ src/mesa/drivers/dri/i965/brw_shader.cpp | 7 +++++++ 2 files changed, 12 insertions(+) (limited to 'src/mesa') diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h index d315793b0b5..825358d5876 100644 --- a/src/mesa/drivers/dri/i965/brw_context.h +++ b/src/mesa/drivers/dri/i965/brw_context.h @@ -341,6 +341,7 @@ struct brw_stage_prog_data { uint32_t gather_texture_start; uint32_t ubo_start; uint32_t abo_start; + uint32_t image_start; uint32_t shader_time_start; /** @} */ } binding_table; @@ -621,6 +622,9 @@ struct brw_vs_prog_data { /** Max number of atomic counter buffer objects in a shader */ #define BRW_MAX_ABO 16 +/** Max number of image uniforms in a shader */ +#define BRW_MAX_IMAGES 32 + /** * Max number of binding table entries used for stream output. * @@ -653,6 +657,7 @@ struct brw_vs_prog_data { BRW_MAX_TEX_UNIT * 2 + /* normal, gather */ \ 12 + /* ubo */ \ BRW_MAX_ABO + \ + BRW_MAX_IMAGES + \ 2 /* shader time, pull constants */) #define SURF_INDEX_GEN6_SOL_BINDING(t) (t) diff --git a/src/mesa/drivers/dri/i965/brw_shader.cpp b/src/mesa/drivers/dri/i965/brw_shader.cpp index d6daac0c383..3eea088f093 100644 --- a/src/mesa/drivers/dri/i965/brw_shader.cpp +++ b/src/mesa/drivers/dri/i965/brw_shader.cpp @@ -1118,6 +1118,13 @@ backend_visitor::assign_common_binding_table_offsets(uint32_t next_binding_table stage_prog_data->binding_table.abo_start = 0xd0d0d0d0; } + if (shader && shader->base.NumImages) { + stage_prog_data->binding_table.image_start = next_binding_table_offset; + next_binding_table_offset += shader->base.NumImages; + } else { + stage_prog_data->binding_table.image_start = 0xd0d0d0d0; + } + /* This may or may not be used depending on how the compile goes. */ stage_prog_data->binding_table.pull_constants_start = next_binding_table_offset; next_binding_table_offset++; -- cgit v1.2.3