mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 22:38:05 +02:00
anv: Add a dynamic state data structure and basic helpers
This commit is contained in:
parent
941a105954
commit
55fcca306b
2 changed files with 125 additions and 3 deletions
|
|
@ -38,6 +38,78 @@
|
|||
* is concerned, most of anv_cmd_buffer is magic.
|
||||
*/
|
||||
|
||||
/* TODO: These are taken from GLES. We should check the Vulkan spec */
|
||||
const struct anv_dynamic_state default_dynamic_state = {
|
||||
.viewport = {
|
||||
.count = 0,
|
||||
},
|
||||
.scissor = {
|
||||
.count = 0,
|
||||
},
|
||||
.line_width = 1.0f,
|
||||
.depth_bias = {
|
||||
.bias = 0.0f,
|
||||
.clamp = 0.0f,
|
||||
.slope_scaled = 0.0f,
|
||||
},
|
||||
.blend_constants = { 0.0f, 0.0f, 0.0f, 0.0f },
|
||||
.depth_bounds = {
|
||||
.min = 0.0f,
|
||||
.max = 1.0f,
|
||||
},
|
||||
.stencil_compare_mask = {
|
||||
.front = ~0u,
|
||||
.back = ~0u,
|
||||
},
|
||||
.stencil_write_mask = {
|
||||
.front = ~0u,
|
||||
.back = ~0u,
|
||||
},
|
||||
.stencil_reference = {
|
||||
.front = 0u,
|
||||
.back = 0u,
|
||||
},
|
||||
};
|
||||
|
||||
void
|
||||
anv_dynamic_state_copy(struct anv_dynamic_state *dest,
|
||||
const struct anv_dynamic_state *src,
|
||||
uint32_t copy_mask)
|
||||
{
|
||||
if (copy_mask & (1 << VK_DYNAMIC_STATE_VIEWPORT)) {
|
||||
dest->viewport.count = src->viewport.count;
|
||||
typed_memcpy(dest->viewport.viewports, src->viewport.viewports,
|
||||
src->viewport.count);
|
||||
}
|
||||
|
||||
if (copy_mask & (1 << VK_DYNAMIC_STATE_SCISSOR)) {
|
||||
dest->scissor.count = src->scissor.count;
|
||||
typed_memcpy(dest->scissor.scissors, src->scissor.scissors,
|
||||
src->scissor.count);
|
||||
}
|
||||
|
||||
if (copy_mask & (1 << VK_DYNAMIC_STATE_LINE_WIDTH))
|
||||
dest->line_width = src->line_width;
|
||||
|
||||
if (copy_mask & (1 << VK_DYNAMIC_STATE_DEPTH_BIAS))
|
||||
dest->depth_bias = src->depth_bias;
|
||||
|
||||
if (copy_mask & (1 << VK_DYNAMIC_STATE_BLEND_CONSTANTS))
|
||||
typed_memcpy(dest->blend_constants, src->blend_constants, 4);
|
||||
|
||||
if (copy_mask & (1 << VK_DYNAMIC_STATE_DEPTH_BOUNDS))
|
||||
dest->depth_bounds = src->depth_bounds;
|
||||
|
||||
if (copy_mask & (1 << VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK))
|
||||
dest->stencil_compare_mask = src->stencil_compare_mask;
|
||||
|
||||
if (copy_mask & (1 << VK_DYNAMIC_STATE_STENCIL_WRITE_MASK))
|
||||
dest->stencil_write_mask = src->stencil_write_mask;
|
||||
|
||||
if (copy_mask & (1 << VK_DYNAMIC_STATE_STENCIL_REFERENCE))
|
||||
dest->stencil_reference = src->stencil_reference;
|
||||
}
|
||||
|
||||
static void
|
||||
anv_cmd_state_init(struct anv_cmd_state *state)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -763,9 +763,11 @@ void
|
|||
anv_descriptor_set_destroy(struct anv_device *device,
|
||||
struct anv_descriptor_set *set);
|
||||
|
||||
#define MAX_VBS 32
|
||||
#define MAX_SETS 8
|
||||
#define MAX_RTS 8
|
||||
#define MAX_VBS 32
|
||||
#define MAX_SETS 8
|
||||
#define MAX_RTS 8
|
||||
#define MAX_VIEWPORTS 16
|
||||
#define MAX_SCISSORS 16
|
||||
#define MAX_PUSH_CONSTANTS_SIZE 128
|
||||
#define MAX_DYNAMIC_BUFFERS 16
|
||||
#define MAX_IMAGES 8
|
||||
|
|
@ -839,6 +841,54 @@ struct anv_push_constants {
|
|||
struct brw_image_param images[MAX_IMAGES];
|
||||
};
|
||||
|
||||
struct anv_dynamic_state {
|
||||
struct {
|
||||
uint32_t count;
|
||||
VkViewport viewports[MAX_VIEWPORTS];
|
||||
} viewport;
|
||||
|
||||
struct {
|
||||
uint32_t count;
|
||||
VkRect2D scissors[MAX_SCISSORS];
|
||||
} scissor;
|
||||
|
||||
float line_width;
|
||||
|
||||
struct {
|
||||
float bias;
|
||||
float clamp;
|
||||
float slope_scaled;
|
||||
} depth_bias;
|
||||
|
||||
float blend_constants[4];
|
||||
|
||||
struct {
|
||||
float min;
|
||||
float max;
|
||||
} depth_bounds;
|
||||
|
||||
struct {
|
||||
uint32_t front;
|
||||
uint32_t back;
|
||||
} stencil_compare_mask;
|
||||
|
||||
struct {
|
||||
uint32_t front;
|
||||
uint32_t back;
|
||||
} stencil_write_mask;
|
||||
|
||||
struct {
|
||||
uint32_t front;
|
||||
uint32_t back;
|
||||
} stencil_reference;
|
||||
};
|
||||
|
||||
extern const struct anv_dynamic_state default_dynamic_state;
|
||||
|
||||
void anv_dynamic_state_copy(struct anv_dynamic_state *dest,
|
||||
const struct anv_dynamic_state *src,
|
||||
uint32_t copy_mask);
|
||||
|
||||
/** State required while building cmd buffer */
|
||||
struct anv_cmd_state {
|
||||
uint32_t current_pipeline;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue