diff --git a/trans/trans-builder.c b/trans/trans-builder.c index 48c8f3c0b5b806d9b4e231f2d454bc22e6453589..9a5a0bfb1494424429a77ab572a0067436568221 100644 --- a/trans/trans-builder.c +++ b/trans/trans-builder.c @@ -396,31 +396,68 @@ trans_emit_tiler_payload(struct panfrost_context *ctx) uint32_t swizzled_bitmap[3*1] = { 0x0000ffff }; mali_ptr bitmap = panfrost_upload(&ctx->cmdstream, swizzled_bitmap, sizeof(swizzled_bitmap), false); + struct pipe_sampler_view _sampler_view = { + .target = PIPE_TEXTURE_2D, + .swizzle_r = PIPE_SWIZZLE_X, + .swizzle_g = PIPE_SWIZZLE_Y, + .swizzle_b = PIPE_SWIZZLE_Z, + .swizzle_a = PIPE_SWIZZLE_W, + }; + + struct pipe_sampler_state _sampler_state = { + .wrap_s = PIPE_TEX_WRAP_CLAMP_TO_EDGE, + .wrap_t = PIPE_TEX_WRAP_CLAMP_TO_EDGE, + .wrap_r = PIPE_TEX_WRAP_CLAMP_TO_EDGE, + .compare_func = PIPE_FUNC_LEQUAL, + .min_img_filter = PIPE_TEX_FILTER_LINEAR, + .mag_img_filter = PIPE_TEX_FILTER_LINEAR, + .border_color = { .f = { 0.0, 0.0, 0.0, 0.0 } }, + }; + + struct pipe_sampler_view *sampler_view = &_sampler_view; + struct pipe_sampler_state *sampler_state = &_sampler_state; + + /* TODO: Other types of textures */ + assert(sampler_view->target == PIPE_TEXTURE_2D); + struct mali_texture_descriptor texture_descriptor = { .width = MALI_POSITIVE(1), .height = MALI_POSITIVE(3), .depth = MALI_POSITIVE(1), + + /* TODO: Decode */ .format1 = 0x118bb688, - .swizzle_r = trans_translate_texture_swizzle(PIPE_SWIZZLE_X), - .swizzle_g = trans_translate_texture_swizzle(PIPE_SWIZZLE_Y), - .swizzle_b = trans_translate_texture_swizzle(PIPE_SWIZZLE_Z), - .swizzle_a = trans_translate_texture_swizzle(PIPE_SWIZZLE_W), - .unknown3 = 0x10000, + + .swizzle_r = trans_translate_texture_swizzle(sampler_view->swizzle_r), + .swizzle_g = trans_translate_texture_swizzle(sampler_view->swizzle_g), + .swizzle_b = trans_translate_texture_swizzle(sampler_view->swizzle_b), + .swizzle_a = trans_translate_texture_swizzle(sampler_view->swizzle_a), + .swizzled_bitmap_0 = bitmap, - .swizzled_bitmap_1 = bitmap + .swizzled_bitmap_1 = bitmap, + + .unknown3 = 0x10000, }; uint64_t texture_trampoline = panfrost_upload(&ctx->cmdstream, &texture_descriptor, sizeof(texture_descriptor), false); struct mali_sampler_descriptor sampler_descriptor = { - .filter_mode = MALI_GL_TEX_MIN(translate_tex_filter(PIPE_TEX_FILTER_LINEAR)) | MALI_GL_TEX_MAG(translate_tex_filter(PIPE_TEX_FILTER_LINEAR)) | 0x20, - .unknown1 = 0x10000, - .wrap_s = translate_tex_wrap(PIPE_TEX_WRAP_CLAMP_TO_EDGE), - .wrap_t = translate_tex_wrap(PIPE_TEX_WRAP_CLAMP_TO_EDGE), - .wrap_r = translate_tex_wrap(PIPE_TEX_WRAP_CLAMP_TO_EDGE), - .compare_func = trans_translate_alt_compare_func(PIPE_FUNC_LEQUAL), + .filter_mode = MALI_GL_TEX_MIN(translate_tex_filter(sampler_state->min_img_filter)) + | MALI_GL_TEX_MAG(translate_tex_filter(sampler_state->mag_img_filter)) + | 0x20, + + .wrap_s = translate_tex_wrap(sampler_state->wrap_s), + .wrap_t = translate_tex_wrap(sampler_state->wrap_t), + .wrap_r = translate_tex_wrap(sampler_state->wrap_r), + .compare_func = trans_translate_alt_compare_func(sampler_state->compare_func), + .border_color = { + sampler_state->border_color.f[0], + sampler_state->border_color.f[1], + sampler_state->border_color.f[2], + sampler_state->border_color.f[3] + }, .unknown2 = 1, - .border_color = { 0.000000, 0.000000, 0.000000, 0.000000 }, + .unknown1 = 0x10000, }; ctx->payload_tiler.texture_trampoline = panfrost_upload(&ctx->cmdstream, &texture_trampoline, sizeof(uint64_t), false);