vk/HACK: Plumb real descriptor set/index into textures
authorJason Ekstrand <jason.ekstrand@intel.com>
Mon, 1 Jun 2015 17:01:23 +0000 (10:01 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Mon, 1 Jun 2015 19:25:58 +0000 (12:25 -0700)
src/glsl/nir/glsl_to_nir.cpp
src/glsl/nir/nir.h
src/mesa/drivers/dri/i965/brw_fs_nir.cpp
src/mesa/drivers/dri/i965/brw_nir.c
src/vulkan/compiler.cpp

index 7a20e1a36f528972eaa1b982c235a24504d1b9bb..7c30be3fa720ff25a72f4ac0601243c28f502ef1 100644 (file)
@@ -321,6 +321,7 @@ nir_visitor::visit(ir_variable *ir)
    }
 
    var->data.index = ir->data.index;
+   var->data.descriptor_set = ir->data.set;
    var->data.binding = ir->data.binding;
    /* XXX Get rid of buffer_index */
    var->data.atomic.buffer_index = ir->data.binding;
index 38dbe13ac033fb9fac17113ddcb921615b3ac526..c666d93e66bce750662cb231ea5dfb880673c10e 100644 (file)
@@ -300,6 +300,7 @@ typedef struct {
        *
        * For array types, this represents the binding point for the first element.
        */
+      int descriptor_set;
       int binding;
 
       /**
@@ -985,6 +986,9 @@ typedef struct {
    /* gather component selector */
    unsigned component : 2;
 
+   /* The descriptor set containing this texture */
+   unsigned sampler_set;
+
    /** The sampler index
     *
     * If this texture instruction has a nir_tex_src_sampler_offset source,
index 82dbca3cf43df90b8584eded93f71b28f9811739..2623241a0563b686549ac7cab1184d98ceae86cf 100644 (file)
@@ -1622,7 +1622,9 @@ fs_visitor::nir_emit_intrinsic(nir_intrinsic_instr *instr)
 void
 fs_visitor::nir_emit_texture(nir_tex_instr *instr)
 {
-   unsigned sampler = instr->sampler_index;
+   uint32_t set = instr->sampler_set;
+   uint32_t index = instr->sampler_index;
+   unsigned sampler = stage_prog_data->bind_map[set][index];
    fs_reg sampler_reg(sampler);
 
    /* FINISHME: We're failing to recompile our programs when the sampler is
index de4d7aafd445a126198dc482694d77ac983c8f2c..e4119b1aa3f475657d305728577270424f145d72 100644 (file)
@@ -144,7 +144,7 @@ brw_create_nir(struct brw_context *brw,
    nir_validate_shader(nir);
 
    if (shader_prog) {
-      nir_lower_samplers(nir, shader_prog, stage);
+      nir_lower_samplers_for_vk(nir);
       nir_validate_shader(nir);
    }
 
index 2bd197e352ba25e4dad25e6ab5a0b580e674c9b5..42c54fbe8d3f35e5df72a02c2982ffa4f6233679 100644 (file)
@@ -71,8 +71,6 @@ set_binding_table_layout(struct brw_stage_prog_data *prog_data,
    else
       bias = 0;
 
-   prog_data->binding_table.texture_start = bias;
-
    count = layout->stage[stage].surface_count;
    prog_data->map_entries =
       (uint32_t *) malloc(count * sizeof(prog_data->map_entries[0]));