anv: Do not emulate texture swizzle for INPUT_ATTACHMENT, STORAGE_IMAGE
If descriptorType is VK_DESCRIPTOR_TYPE_STORAGE_IMAGE
or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, the imageView member of each
element of pImageInfo must have been created with the identity swizzle.
Fixes: d2aa65eb
Signed-off-by: Danylo Piliaiev <danylo.piliaiev@globallogic.com>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
This commit is contained in:

committed by
Lionel Landwerlin

parent
397fe0cc50
commit
c82dcf89ae
@@ -103,7 +103,11 @@ anv_descriptor_data_for_type(const struct anv_physical_device *device,
|
|||||||
type == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC))
|
type == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC))
|
||||||
data |= ANV_DESCRIPTOR_ADDRESS_RANGE;
|
data |= ANV_DESCRIPTOR_ADDRESS_RANGE;
|
||||||
|
|
||||||
/* On Ivy Bridge and Bay Trail, we need swizzles textures in the shader */
|
/* On Ivy Bridge and Bay Trail, we need swizzles textures in the shader
|
||||||
|
* Do not handle VK_DESCRIPTOR_TYPE_STORAGE_IMAGE and
|
||||||
|
* VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT because they already must
|
||||||
|
* have identity swizzle.
|
||||||
|
*/
|
||||||
if (device->info.gen == 7 && !device->info.is_haswell &&
|
if (device->info.gen == 7 && !device->info.is_haswell &&
|
||||||
(type == VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE ||
|
(type == VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE ||
|
||||||
type == VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER))
|
type == VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER))
|
||||||
|
@@ -929,13 +929,15 @@ lower_gen7_tex_swizzle(nir_tex_instr *tex, unsigned plane,
|
|||||||
assert(deref_src_idx >= 0);
|
assert(deref_src_idx >= 0);
|
||||||
|
|
||||||
nir_deref_instr *deref = nir_src_as_deref(tex->src[deref_src_idx].src);
|
nir_deref_instr *deref = nir_src_as_deref(tex->src[deref_src_idx].src);
|
||||||
UNUSED nir_variable *var = nir_deref_instr_get_variable(deref);
|
nir_variable *var = nir_deref_instr_get_variable(deref);
|
||||||
|
|
||||||
UNUSED unsigned set = var->data.descriptor_set;
|
unsigned set = var->data.descriptor_set;
|
||||||
UNUSED unsigned binding = var->data.binding;
|
unsigned binding = var->data.binding;
|
||||||
UNUSED const struct anv_descriptor_set_binding_layout *bind_layout =
|
const struct anv_descriptor_set_binding_layout *bind_layout =
|
||||||
&state->layout->set[set].layout->binding[binding];
|
&state->layout->set[set].layout->binding[binding];
|
||||||
assert(bind_layout->data & ANV_DESCRIPTOR_TEXTURE_SWIZZLE);
|
|
||||||
|
if ((bind_layout->data & ANV_DESCRIPTOR_TEXTURE_SWIZZLE) == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
nir_builder *b = &state->builder;
|
nir_builder *b = &state->builder;
|
||||||
b->cursor = nir_before_instr(&tex->instr);
|
b->cursor = nir_before_instr(&tex->instr);
|
||||||
|
Reference in New Issue
Block a user