diff --git a/src/gallium/auxiliary/tgsi/tgsi_ureg.c b/src/gallium/auxiliary/tgsi/tgsi_ureg.c index 8ca3e7fd6ca3e269155cf930f9d2742146222ec8..24cd41cc64e7a15810c7b64a45803bb30ea67015 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_ureg.c +++ b/src/gallium/auxiliary/tgsi/tgsi_ureg.c @@ -1577,8 +1577,8 @@ emit_decl_semantic(struct ureg_program *ureg, unsigned array_id, bool invariant) { - emit_decl_semantic_typed(ureg, file, first, last, - semantic_name, semantic_index, streams, usage_mask, array_id, + emit_decl_semantic_typed(ureg, file, first, last, + semantic_name, semantic_index, streams, usage_mask, array_id, invariant, TGSI_RETURN_TYPE_UNKNOWN); } diff --git a/src/gallium/auxiliary/util/u_simple_shaders.c b/src/gallium/auxiliary/util/u_simple_shaders.c index bb43b165acbd5faf0dfdb94a17cccb89787c1f1e..98ff6ba76fb2b19c6d9cd22af4df6bd7ee47bd77 100644 --- a/src/gallium/auxiliary/util/u_simple_shaders.c +++ b/src/gallium/auxiliary/util/u_simple_shaders.c @@ -269,13 +269,13 @@ util_make_fragment_tex_shader(struct pipe_context *pipe, ureg_DECL_sampler_view(ureg, 0, tex_target, stype, stype, stype, stype); - tex = ureg_DECL_fs_input( ureg, - TGSI_SEMANTIC_GENERIC, 0, + tex = ureg_DECL_fs_input( ureg, + TGSI_SEMANTIC_GENERIC, 0, TGSI_INTERPOLATE_LINEAR ); - out = ureg_DECL_output_typed( ureg, + out = ureg_DECL_output_typed( ureg, TGSI_SEMANTIC_COLOR, - 0, dtype); + 0, dtype ); temp = ureg_DECL_temporary(ureg); diff --git a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c index f0a56a724a2f08f39d805ca3b4972b91bddf7c7c..0a7bb948d34d7a132b87199ccf6e099bcdfd19e7 100644 --- a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c +++ b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c @@ -4766,8 +4766,6 @@ nir_to_spirv(struct nir_shader *s, const struct zink_shader_info *sinfo, const s case MESA_SHADER_GEOMETRY: spirv_builder_emit_cap(&ctx.builder, SpvCapabilityGeometry); - if (s->info.gs.active_stream_mask) - spirv_builder_emit_cap(&ctx.builder, SpvCapabilityGeometryStreams); if (s->info.outputs_written & BITFIELD64_BIT(VARYING_SLOT_PSIZ)) spirv_builder_emit_cap(&ctx.builder, SpvCapabilityGeometryPointSize); break; diff --git a/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c b/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c index f02ffda1caad504e633200bb22fbbdbdc1bb665c..7c0d62db3294e09ec9fa5e19ec31839091724f72 100644 --- a/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c +++ b/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c @@ -300,6 +300,7 @@ spirv_builder_emit_vertex(struct spirv_builder *b, uint32_t stream, bool multist unsigned words = 1; SpvOp op = SpvOpEmitVertex; if (multistream) { + spirv_builder_emit_cap(b, SpvCapabilityGeometryStreams); op = SpvOpEmitStreamVertex; words++; } @@ -314,6 +315,9 @@ spirv_builder_end_primitive(struct spirv_builder *b, uint32_t stream, bool multi { unsigned words = 1; SpvOp op = SpvOpEndPrimitive; + + if (multistream) + spirv_builder_emit_cap(b, SpvCapabilityGeometryStreams); if (multistream || stream > 0) { op = SpvOpEndStreamPrimitive; words++; @@ -417,7 +421,7 @@ spirv_builder_emit_member_builtin(struct spirv_builder *b, SpvId target, uint32_t member, SpvBuiltIn builtin) { uint32_t args[] = { builtin }; - emit_member_decoration(b, target, member, SpvDecorationBuiltin, + emit_member_decoration(b, target, member, SpvDecorationBuiltIn, args, ARRAY_SIZE(args)); } diff --git a/src/gallium/drivers/zink/zink_context.c b/src/gallium/drivers/zink/zink_context.c index aa23d79db9cd1acaf83f5876e5df82ceca9668a4..9bc47a52abe3aeaa62bf51de5b9e24fa7359344e 100644 --- a/src/gallium/drivers/zink/zink_context.c +++ b/src/gallium/drivers/zink/zink_context.c @@ -5203,7 +5203,7 @@ zink_get_dummy_pipe_surface(struct zink_context *ctx, int samples_index) if (ctx->dummy_surface[samples_index]) { /* delete old surface if ETOOSMALL */ struct zink_resource *res = zink_resource(ctx->dummy_surface[samples_index]->texture); - if (res->base.b.width0 > size || res->base.b.height0 > size) { + if (res->base.b.width0 < size || res->base.b.height0 < size) { pipe_surface_release(&ctx->base, &ctx->dummy_surface[samples_index]); needs_null_init = !samples_index && ctx->di.null_fbfetch_init; if (!samples_index) diff --git a/src/gallium/drivers/zink/zink_lower_cubemap_to_array.c b/src/gallium/drivers/zink/zink_lower_cubemap_to_array.c index cfadb6e9ba8ea3bb1fea5873f5f6e596317b7851..8557c114d5b23a717f5479b25b587de09f596ca5 100644 --- a/src/gallium/drivers/zink/zink_lower_cubemap_to_array.c +++ b/src/gallium/drivers/zink/zink_lower_cubemap_to_array.c @@ -388,9 +388,11 @@ lower_cube_coords(nir_builder *b, nir_def *coord, bool is_array) static void rewrite_cube_var_type(nir_builder *b, nir_tex_instr *tex) { - nir_variable *sampler = nir_deref_instr_get_variable(nir_instr_as_deref(tex->src[nir_tex_instr_src_index(tex, nir_tex_src_texture_deref)].src.ssa->parent_instr)); + nir_deref_instr *texture_deref = nir_instr_as_deref(tex->src[nir_tex_instr_src_index(tex, nir_tex_src_texture_deref)].src.ssa->parent_instr); + nir_variable *sampler = nir_deref_instr_get_variable(texture_deref); assert(sampler); sampler->type = make_2darray_from_cubemap_with_array(sampler->type); + texture_deref->type = sampler->type; } /* txb(s, coord, bias) = txl(s, coord, lod(s, coord).y + bias) */ diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c index a0709d094fe4eca4aba960d0f2bbe38b761e283b..c25737d9d09ed10f0e0ff295fde653204f6d880c 100644 --- a/src/gallium/drivers/zink/zink_screen.c +++ b/src/gallium/drivers/zink/zink_screen.c @@ -3392,8 +3392,6 @@ zink_internal_create_screen(const struct pipe_screen_config *config, int64_t dev goto fail; } - screen->info.feats.features.geometryShader = false; - if (zink_set_driver_strings(screen)) { mesa_loge("ZINK: failed to set driver strings\n"); goto fail;