vk/vulkan.h: Remove programPointSize

Instead, we auto-detect whether or not your shader writes gl_PointSize.  If
it does, we use 1.0, otherwise we take it from the shader.
This commit is contained in:
Jason Ekstrand
2015-07-07 15:57:03 -07:00
parent e7ddfe03ab
commit abbb776bbe
5 changed files with 11 additions and 3 deletions

View File

@@ -1469,7 +1469,6 @@ typedef struct {
const void* pNext; const void* pNext;
bool32_t depthClipEnable; bool32_t depthClipEnable;
bool32_t rasterizerDiscardEnable; bool32_t rasterizerDiscardEnable;
bool32_t programPointSize;
VkFillMode fillMode; VkFillMode fillMode;
VkCullMode cullMode; VkCullMode cullMode;
VkFrontFace frontFace; VkFrontFace frontFace;

View File

@@ -1018,6 +1018,8 @@ anv_compiler_run(struct anv_compiler *compiler, struct anv_pipeline *pipeline)
int name = 0; int name = 0;
struct brw_context *brw = compiler->brw; struct brw_context *brw = compiler->brw;
pipeline->writes_point_size = false;
/* When we free the pipeline, we detect stages based on the NULL status /* When we free the pipeline, we detect stages based on the NULL status
* of various prog_data pointers. Make them NULL by default. * of various prog_data pointers. Make them NULL by default.
*/ */
@@ -1086,6 +1088,9 @@ anv_compiler_run(struct anv_compiler *compiler, struct anv_pipeline *pipeline)
fail_if(!success, "do_wm_prog failed\n"); fail_if(!success, "do_wm_prog failed\n");
add_compiled_stage(pipeline, VK_SHADER_STAGE_VERTEX, add_compiled_stage(pipeline, VK_SHADER_STAGE_VERTEX,
&pipeline->vs_prog_data.base.base); &pipeline->vs_prog_data.base.base);
if (vp->Base.OutputsWritten & VARYING_SLOT_PSIZ)
pipeline->writes_point_size = true;
} else { } else {
memset(&pipeline->vs_prog_data, 0, sizeof(pipeline->vs_prog_data)); memset(&pipeline->vs_prog_data, 0, sizeof(pipeline->vs_prog_data));
pipeline->vs_simd8 = NO_KERNEL; pipeline->vs_simd8 = NO_KERNEL;
@@ -1104,6 +1109,9 @@ anv_compiler_run(struct anv_compiler *compiler, struct anv_pipeline *pipeline)
fail_if(!success, "do_gs_prog failed\n"); fail_if(!success, "do_gs_prog failed\n");
add_compiled_stage(pipeline, VK_SHADER_STAGE_GEOMETRY, add_compiled_stage(pipeline, VK_SHADER_STAGE_GEOMETRY,
&pipeline->gs_prog_data.base.base); &pipeline->gs_prog_data.base.base);
if (gp->Base.OutputsWritten & VARYING_SLOT_PSIZ)
pipeline->writes_point_size = true;
} else { } else {
pipeline->gs_vec4 = NO_KERNEL; pipeline->gs_vec4 = NO_KERNEL;
} }

View File

@@ -2034,7 +2034,6 @@ VkResult anv_CreateDynamicRasterState(
struct GEN8_3DSTATE_SF sf = { struct GEN8_3DSTATE_SF sf = {
GEN8_3DSTATE_SF_header, GEN8_3DSTATE_SF_header,
.LineWidth = pCreateInfo->lineWidth, .LineWidth = pCreateInfo->lineWidth,
.PointWidth = 1.0,
}; };
GEN8_3DSTATE_SF_pack(NULL, state->state_sf, &sf); GEN8_3DSTATE_SF_pack(NULL, state->state_sf, &sf);

View File

@@ -184,7 +184,8 @@ emit_rs_state(struct anv_pipeline *pipeline, VkPipelineRsStateCreateInfo *info,
.TriangleStripListProvokingVertexSelect = 0, .TriangleStripListProvokingVertexSelect = 0,
.LineStripListProvokingVertexSelect = 0, .LineStripListProvokingVertexSelect = 0,
.TriangleFanProvokingVertexSelect = 0, .TriangleFanProvokingVertexSelect = 0,
.PointWidthSource = info->programPointSize ? Vertex : State, .PointWidthSource = pipeline->writes_point_size ? Vertex : State,
.PointWidth = 1.0,
}; };
/* FINISHME: bool32_t rasterizerDiscardEnable; */ /* FINISHME: bool32_t rasterizerDiscardEnable; */

View File

@@ -733,6 +733,7 @@ struct anv_pipeline {
struct brw_wm_prog_data wm_prog_data; struct brw_wm_prog_data wm_prog_data;
struct brw_gs_prog_data gs_prog_data; struct brw_gs_prog_data gs_prog_data;
struct brw_cs_prog_data cs_prog_data; struct brw_cs_prog_data cs_prog_data;
bool writes_point_size;
struct brw_stage_prog_data * prog_data[VK_SHADER_STAGE_NUM]; struct brw_stage_prog_data * prog_data[VK_SHADER_STAGE_NUM];
uint32_t scratch_start[VK_SHADER_STAGE_NUM]; uint32_t scratch_start[VK_SHADER_STAGE_NUM];
uint32_t total_scratch; uint32_t total_scratch;