From: Mikko Rasa Date: Tue, 6 Sep 2022 11:52:56 +0000 (+0300) Subject: Pass a non-sampled image to OP_IMAGE_FETCH X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=commitdiff_plain;h=e77f248bcd1d8126c392451e6057417e74aef05f Pass a non-sampled image to OP_IMAGE_FETCH --- diff --git a/source/glsl/spirv.cpp b/source/glsl/spirv.cpp index b86734f6..1fc9799f 100644 --- a/source/glsl/spirv.cpp +++ b/source/glsl/spirv.cpp @@ -1443,7 +1443,7 @@ void SpirVGenerator::visit_builtin_texture(FunctionCall &call, const vector void SpirVGenerator::visit_builtin_texture_fetch(FunctionCall &call, const vector &argument_ids) { - const ImageTypeDeclaration &image = dynamic_cast(*call.arguments[0]->type); + ImageTypeDeclaration &image = dynamic_cast(*call.arguments[0]->type); Opcode opcode; if(call.name=="texelFetch") @@ -1459,9 +1459,18 @@ void SpirVGenerator::visit_builtin_texture_fetch(FunctionCall &call, const vecto if(argument_ids.size()!=2U+need_sample+need_lod) throw internal_error("invalid texture fetch call"); + Id image_id; + if(image.sampled) + { + Id image_type_id = get_item(image_type_ids, get_id(image)); + image_id = write_expression(OP_IMAGE, image_type_id, argument_ids[0]); + } + else + image_id = argument_ids[0]; + r_expression_result_id = begin_expression(opcode, get_id(*call.type), 2+(need_lod|need_sample)+need_lod+need_sample); - for(unsigned i=0; i<2; ++i) - writer.write(argument_ids[i]); + writer.write(image_id); + writer.write(argument_ids[1]); if(need_lod || need_sample) { writer.write(need_lod*0x02 | need_sample*0x40);