On Mon, Jan 8, 2018 at 10:33 AM, Lionel Landwerlin <
lionel.g.landwer...@intel.com> wrote:

> On 17/12/17 05:46, Jason Ekstrand wrote:
>
>> ---
>>   src/compiler/spirv/spirv_to_nir.c | 17 ++++++++++-------
>>   1 file changed, 10 insertions(+), 7 deletions(-)
>>
>> diff --git a/src/compiler/spirv/spirv_to_nir.c
>> b/src/compiler/spirv/spirv_to_nir.c
>> index 83c75c7..ffea442 100644
>> --- a/src/compiler/spirv/spirv_to_nir.c
>> +++ b/src/compiler/spirv/spirv_to_nir.c
>> @@ -1075,10 +1075,12 @@ vtn_handle_type(struct vtn_builder *b, SpvOp
>> opcode,
>>      case SpvOpTypeImage: {
>>         val->type->base_type = vtn_base_type_image;
>>   -      const struct glsl_type *sampled_type =
>> -         vtn_value(b, w[2], vtn_value_type_type)->type->type;
>> +      const struct vtn_type *sampled_type =
>> +         vtn_value(b, w[2], vtn_value_type_type)->type;
>>   -      vtn_assert(glsl_type_is_vector_or_scalar(sampled_type));
>> +      vtn_fail_if(sampled_type->base_type != vtn_base_type_scalar ||
>> +                  glsl_get_bit_size(sampled_type->type) != 32,
>> +                  "Sampled type of OpTypeImage must be a 32-bit scalar");
>>
>
> Maybe I'm missing something, but the 1.3 spec says :
>
> "Sampled Type is the type of the components that result from sampling or
> reading from this image type. Must be a
> scalar numerical type or OpTypeVoid."
>
> "Numerical type: An integer type or a floating-point type."
>
> "Floating-point type: Any width type from OpTypeFloat."
>
> And OpTypeFloat can have variable width (like 16bits), so I'm not too sure
> about != 32 for the fail_if() above.
>

Ugh... I don't know what to do with this.  GLSL doesn't support anything
other than 32-bit types so glslang won't produce anything else.  Also,
nothing in NIR or GLSL IR is prepared to handle anything other than 32-bit
image types.  We could bend over backwards to allow it here but there would
be no testing.  My opinion after a few minutes thought is to leave it
as-is.  I've filed a Vulkan spec bug.

--Jason



>           enum glsl_sampler_dim dim;
>>         switch ((SpvDim)w[3]) {
>> @@ -1090,7 +1092,7 @@ vtn_handle_type(struct vtn_builder *b, SpvOp opcode,
>>         case SpvDimBuffer:   dim = GLSL_SAMPLER_DIM_BUF;   break;
>>         case SpvDimSubpassData: dim = GLSL_SAMPLER_DIM_SUBPASS; break;
>>         default:
>> -         vtn_fail("Invalid SPIR-V Sampler dimension");
>> +         vtn_fail("Invalid SPIR-V image dimensionality");
>>         }
>>           bool is_shadow = w[4];
>> @@ -1115,15 +1117,16 @@ vtn_handle_type(struct vtn_builder *b, SpvOp
>> opcode,
>>           val->type->image_format = translate_image_format(b, format);
>>   +      enum glsl_base_type sampled_base_type =
>> +         glsl_get_base_type(sampled_type->type);
>>         if (sampled == 1) {
>>            val->type->sampled = true;
>>            val->type->type = glsl_sampler_type(dim, is_shadow, is_array,
>> -
>>  glsl_get_base_type(sampled_type));
>> +                                             sampled_base_type);
>>         } else if (sampled == 2) {
>>            vtn_assert(!is_shadow);
>>            val->type->sampled = false;
>> -         val->type->type = glsl_image_type(dim, is_array,
>> -                                           glsl_get_base_type(sampled_ty
>> pe));
>> +         val->type->type = glsl_image_type(dim, is_array,
>> sampled_base_type);
>>         } else {
>>            vtn_fail("We need to know if the image will be sampled");
>>         }
>>
>
>
>
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to