diff --git a/include/private/vkd3d_common.h b/include/private/vkd3d_common.h index c03ac72e70526812e4e72817ff83260a0fafbe0f..de6878a4b49a7dad0f83ec41718dec4828caa45e 100644 --- a/include/private/vkd3d_common.h +++ b/include/private/vkd3d_common.h @@ -340,6 +340,8 @@ static inline int vkd3d_u32_compare(uint32_t x, uint32_t y) return (x > y) - (x < y); } +#define VKD3D_BITMAP_SIZE(x) (((x) + 0x1f) >> 5) + static inline bool bitmap_clear(uint32_t *map, unsigned int idx) { return map[idx >> 5] &= ~(1u << (idx & 0x1f)); diff --git a/libs/vkd3d-shader/d3dbc.c b/libs/vkd3d-shader/d3dbc.c index f7160f1233991ddd4001fa64df71ee8f0bedb6ed..55d9ecf707dd8ca6bccb98e36abc5288ff15c499 100644 --- a/libs/vkd3d-shader/d3dbc.c +++ b/libs/vkd3d-shader/d3dbc.c @@ -216,7 +216,7 @@ struct vkd3d_shader_sm1_parser struct vkd3d_shader_parser p; #define MAX_CONSTANT_COUNT 8192 - uint32_t constant_def_mask[3][MAX_CONSTANT_COUNT / 32]; + uint32_t constant_def_mask[3][VKD3D_BITMAP_SIZE(MAX_CONSTANT_COUNT)]; }; /* This table is not order or position dependent. */ diff --git a/libs/vkd3d-shader/dxil.c b/libs/vkd3d-shader/dxil.c index d07d5adee700d014981aa431224269b6939bcf49..6a1fb6bddb764254eb4430e551ff7cc4806272f5 100644 --- a/libs/vkd3d-shader/dxil.c +++ b/libs/vkd3d-shader/dxil.c @@ -805,7 +805,7 @@ struct sm6_parser struct vkd3d_shader_dst_param *output_params; struct vkd3d_shader_dst_param *input_params; struct vkd3d_shader_dst_param *patch_constant_params; - uint32_t io_regs_declared[(VKD3DSPR_COUNT + 0x1f) / 0x20]; + uint32_t io_regs_declared[VKD3D_BITMAP_SIZE(VKD3DSPR_COUNT)]; struct sm6_function *functions; size_t function_count; diff --git a/libs/vkd3d-shader/ir.c b/libs/vkd3d-shader/ir.c index 552de31150a996d62df9d9675126e43ed33321d0..59b74c065d8d587e47254a4f244ddd56ea0def20 100644 --- a/libs/vkd3d-shader/ir.c +++ b/libs/vkd3d-shader/ir.c @@ -2917,8 +2917,7 @@ static enum vkd3d_result vsir_block_init(struct vsir_block *block, unsigned int if (block_count > SIZE_MAX - (sizeof(*block->dominates) * CHAR_BIT - 1)) return VKD3D_ERROR_OUT_OF_MEMORY; - block_count = align(block_count, sizeof(*block->dominates) * CHAR_BIT); - byte_count = block_count / CHAR_BIT; + byte_count = VKD3D_BITMAP_SIZE(block_count) * sizeof(*block->dominates); assert(label); memset(block, 0, sizeof(*block)); diff --git a/tests/shader_runner.h b/tests/shader_runner.h index ef0b753b34ce6499e5242922a3877f068bf0fafb..5f061fa7dc79b2c74d7c9cbff0549aada05478bb 100644 --- a/tests/shader_runner.h +++ b/tests/shader_runner.h @@ -177,7 +177,7 @@ struct shader_runner struct resource *resources[MAX_RESOURCES]; size_t resource_count; - uint32_t failed_resources[RESOURCE_TYPE_VERTEX_BUFFER + 1][(MAX_RESOURCES + 0x1f) / 0x20]; + uint32_t failed_resources[RESOURCE_TYPE_VERTEX_BUFFER + 1][VKD3D_BITMAP_SIZE(MAX_RESOURCES)]; unsigned int failed_resource_count; struct sampler samplers[MAX_SAMPLERS];