radeonsi: move the buffer descriptor to the end of the image descriptor
This will allow supporting NULL textures. Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
This commit is contained in:
@@ -1063,7 +1063,7 @@ static void si_invalidate_buffer(struct pipe_context *ctx, struct pipe_resource
|
||||
/* Texture buffers - update virtual addresses in sampler view descriptors. */
|
||||
LIST_FOR_EACH_ENTRY(view, &sctx->b.texture_buffers, list) {
|
||||
if (view->base.texture == buf) {
|
||||
si_desc_reset_buffer_offset(ctx, view->state, old_va, buf);
|
||||
si_desc_reset_buffer_offset(ctx, &view->state[4], old_va, buf);
|
||||
}
|
||||
}
|
||||
/* Texture buffers - update bindings. */
|
||||
|
||||
@@ -90,6 +90,8 @@ struct si_sampler_view {
|
||||
struct pipe_sampler_view base;
|
||||
struct list_head list;
|
||||
struct r600_resource *resource;
|
||||
/* [0..7] = image descriptor
|
||||
* [4..7] = buffer descriptor */
|
||||
uint32_t state[8];
|
||||
uint32_t fmask_state[8];
|
||||
};
|
||||
|
||||
@@ -1538,7 +1538,7 @@ static void tex_fetch_args(
|
||||
/* Bitcast and truncate v8i32 to v16i8. */
|
||||
LLVMValueRef res = si_shader_ctx->resources[sampler_index];
|
||||
res = LLVMBuildBitCast(gallivm->builder, res, v2i128, "");
|
||||
res = LLVMBuildExtractElement(gallivm->builder, res, bld_base->uint_bld.zero, "");
|
||||
res = LLVMBuildExtractElement(gallivm->builder, res, bld_base->uint_bld.one, "");
|
||||
res = LLVMBuildBitCast(gallivm->builder, res, v16i8, "");
|
||||
|
||||
emit_data->dst_type = LLVMVectorType(bld_base->base.elem_type, 4);
|
||||
@@ -2016,7 +2016,7 @@ static void txq_fetch_args(
|
||||
LLVMValueRef size = si_shader_ctx->resources[inst->Src[1].Register.Index];
|
||||
size = LLVMBuildBitCast(gallivm->builder, size, v8i32, "");
|
||||
size = LLVMBuildExtractElement(gallivm->builder, size,
|
||||
lp_build_const_int32(gallivm, 2), "");
|
||||
lp_build_const_int32(gallivm, 6), "");
|
||||
emit_data->args[0] = size;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2262,11 +2262,11 @@ static struct pipe_sampler_view *si_create_sampler_view(struct pipe_context *ctx
|
||||
format = si_translate_buffer_dataformat(ctx->screen, desc, first_non_void);
|
||||
num_format = si_translate_buffer_numformat(ctx->screen, desc, first_non_void);
|
||||
|
||||
view->state[0] = va;
|
||||
view->state[1] = S_008F04_BASE_ADDRESS_HI(va >> 32) |
|
||||
view->state[4] = va;
|
||||
view->state[5] = S_008F04_BASE_ADDRESS_HI(va >> 32) |
|
||||
S_008F04_STRIDE(stride);
|
||||
view->state[2] = state->u.buf.last_element + 1 - state->u.buf.first_element;
|
||||
view->state[3] = S_008F0C_DST_SEL_X(si_map_swizzle(desc->swizzle[0])) |
|
||||
view->state[6] = state->u.buf.last_element + 1 - state->u.buf.first_element;
|
||||
view->state[7] = S_008F0C_DST_SEL_X(si_map_swizzle(desc->swizzle[0])) |
|
||||
S_008F0C_DST_SEL_Y(si_map_swizzle(desc->swizzle[1])) |
|
||||
S_008F0C_DST_SEL_Z(si_map_swizzle(desc->swizzle[2])) |
|
||||
S_008F0C_DST_SEL_W(si_map_swizzle(desc->swizzle[3])) |
|
||||
|
||||
Reference in New Issue
Block a user