summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/svga
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers/svga')
-rw-r--r--src/gallium/drivers/svga/svga_state_constants.c69
1 files changed, 31 insertions, 38 deletions
diff --git a/src/gallium/drivers/svga/svga_state_constants.c b/src/gallium/drivers/svga/svga_state_constants.c
index 70682d157f8..1c0ed6cac94 100644
--- a/src/gallium/drivers/svga/svga_state_constants.c
+++ b/src/gallium/drivers/svga/svga_state_constants.c
@@ -37,18 +37,17 @@
/*
- * Don't try to send more than 4k of successive constants.
+ * Don't try to send more than 4kb of successive constants.
*/
-#define MAX_CONST_REG_COUNT 256 /* 4k */
+#define MAX_CONST_REG_COUNT 256 /**< number of float[4] constants */
-/***********************************************************************
- * Hardware update
- */
-/* Convert from PIPE_SHADER_* to SVGA3D_SHADERTYPE_*
+/**
+ * Convert from PIPE_SHADER_* to SVGA3D_SHADERTYPE_*
*/
-static int svga_shader_type( unsigned shader )
+static int
+svga_shader_type(unsigned shader)
{
assert(PIPE_SHADER_VERTEX + 1 == SVGA3D_SHADERTYPE_VS);
assert(PIPE_SHADER_FRAGMENT + 1 == SVGA3D_SHADERTYPE_PS);
@@ -56,7 +55,8 @@ static int svga_shader_type( unsigned shader )
return shader + 1;
}
-/*
+
+/**
* Check and emit one shader constant register.
* \param shader PIPE_SHADER_FRAGMENT or PIPE_SHADER_VERTEX
* \param i which float[4] constant to change
@@ -69,10 +69,10 @@ emit_const(struct svga_context *svga, unsigned shader, unsigned i,
enum pipe_error ret = PIPE_OK;
assert(shader < PIPE_SHADER_TYPES);
-
assert(i < SVGA3D_CONSTREG_MAX);
- if (memcmp(svga->state.hw_draw.cb[shader][i], value, 4 * sizeof(float)) != 0) {
+ if (memcmp(svga->state.hw_draw.cb[shader][i], value,
+ 4 * sizeof(float)) != 0) {
if (SVGA_DEBUG & DEBUG_CONSTS)
debug_printf("%s %s %u: %f %f %f %f\n",
__FUNCTION__,
@@ -83,7 +83,7 @@ emit_const(struct svga_context *svga, unsigned shader, unsigned i,
value[2],
value[3]);
- ret = SVGA3D_SetShaderConst( svga->swc,
+ ret = SVGA3D_SetShaderConst( svga->swc,
i,
svga_shader_type(shader),
SVGA3D_CONST_TYPE_FLOAT,
@@ -93,20 +93,22 @@ emit_const(struct svga_context *svga, unsigned shader, unsigned i,
memcpy(svga->state.hw_draw.cb[shader][i], value, 4 * sizeof(float));
}
-
+
return ret;
}
+
/*
* Check and emit a range of shader constant registers, trying to coalesce
* successive shader constant updates in a single command in order to save
* space on the command buffer. This is a HWv8 feature.
*/
-static enum pipe_error emit_const_range( struct svga_context *svga,
- unsigned shader,
- unsigned offset,
- unsigned count,
- const float (*values)[4] )
+static enum pipe_error
+emit_const_range(struct svga_context *svga,
+ unsigned shader,
+ unsigned offset,
+ unsigned count,
+ const float (*values)[4])
{
unsigned i, j;
enum pipe_error ret;
@@ -140,11 +142,8 @@ static enum pipe_error emit_const_range( struct svga_context *svga,
if (memcmp(svga->state.hw_draw.cb[shader][offset + i],
values[i],
4 * sizeof(float)) != 0) {
-
- /*
- * Found one dirty constant
+ /* Found one dirty constant
*/
-
if (SVGA_DEBUG & DEBUG_CONSTS)
debug_printf("%s %s %d: %f %f %f %f\n",
__FUNCTION__,
@@ -155,10 +154,8 @@ static enum pipe_error emit_const_range( struct svga_context *svga,
values[i][2],
values[i][3]);
- /*
- * Look for more consecutive dirty constants.
+ /* Look for more consecutive dirty constants.
*/
-
j = i + 1;
while (j < count &&
j < i + MAX_CONST_REG_COUNT &&
@@ -181,10 +178,8 @@ static enum pipe_error emit_const_range( struct svga_context *svga,
assert(j >= i + 1);
- /*
- * Send them all together.
+ /* Send them all together.
*/
-
ret = SVGA3D_SetShaderConsts(svga->swc,
offset + i, j - i,
svga_shader_type(shader),
@@ -197,7 +192,6 @@ static enum pipe_error emit_const_range( struct svga_context *svga,
/*
* Local copy of the hardware state.
*/
-
memcpy(svga->state.hw_draw.cb[shader][offset + i],
values[i],
(j - i) * 4 * sizeof(float));
@@ -279,9 +273,7 @@ emit_fs_consts(struct svga_context *svga, unsigned dirty)
* doesn't have a 'result' struct. It should be fixed to avoid
* this special case, but work around it with a NULL check:
*/
- if (result != NULL &&
- key->num_unnormalized_coords)
- {
+ if (result != NULL && key->num_unnormalized_coords) {
unsigned offset = result->shader->info.file_max[TGSI_FILE_CONSTANT] + 1;
int i;
@@ -311,7 +303,7 @@ emit_fs_consts(struct svga_context *svga, unsigned dirty)
}
-struct svga_tracked_state svga_hw_fs_parameters =
+struct svga_tracked_state svga_hw_fs_parameters =
{
"hw fs params",
(SVGA_NEW_FS_CONST_BUFFER |
@@ -320,8 +312,7 @@ struct svga_tracked_state svga_hw_fs_parameters =
emit_fs_consts
};
-/***********************************************************************
- */
+
static enum pipe_error
emit_vs_consts(struct svga_context *svga, unsigned dirty)
@@ -333,18 +324,20 @@ emit_vs_consts(struct svga_context *svga, unsigned dirty)
/* SVGA_NEW_VS_RESULT
*/
- if (result == NULL)
+ if (result == NULL)
return PIPE_OK;
- /* SVGA_NEW_VS_CONST_BUFFER
+ /* SVGA_NEW_VS_CONST_BUFFER
*/
ret = emit_consts( svga, PIPE_SHADER_VERTEX );
if (ret != PIPE_OK)
return ret;
+ /* offset = number of constants in the VS const buffer */
offset = result->shader->info.file_max[TGSI_FILE_CONSTANT] + 1;
/* SVGA_NEW_VS_RESULT
+ * Put the viewport pre-scale/translate values into the const buffer.
*/
if (key->need_prescale) {
ret = emit_const( svga, PIPE_SHADER_VERTEX, offset++,
@@ -359,6 +352,7 @@ emit_vs_consts(struct svga_context *svga, unsigned dirty)
}
/* SVGA_NEW_ZERO_STRIDE
+ * Put the zero-stride vertex array attributes into the const buffer.
*/
if (key->zero_stride_vertex_elements) {
unsigned i, curr_zero_stride = 0;
@@ -378,7 +372,7 @@ emit_vs_consts(struct svga_context *svga, unsigned dirty)
}
-struct svga_tracked_state svga_hw_vs_parameters =
+struct svga_tracked_state svga_hw_vs_parameters =
{
"hw vs params",
(SVGA_NEW_PRESCALE |
@@ -387,4 +381,3 @@ struct svga_tracked_state svga_hw_vs_parameters =
SVGA_NEW_VS_RESULT),
emit_vs_consts
};
-