Disable GL cull on rectangle lists
This commit is contained in:
parent
3859b0a091
commit
a34e82c77f
|
@ -578,7 +578,7 @@ bool GL4CommandProcessor::IssueDraw(PrimitiveType prim_type,
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
status = UpdateState();
|
status = UpdateState(draw_batcher_.prim_type());
|
||||||
CHECK_ISSUE_UPDATE_STATUS(status, mismatch, "Unable to setup render state");
|
CHECK_ISSUE_UPDATE_STATUS(status, mismatch, "Unable to setup render state");
|
||||||
status = PopulateSamplers();
|
status = PopulateSamplers();
|
||||||
CHECK_ISSUE_UPDATE_STATUS(status, mismatch,
|
CHECK_ISSUE_UPDATE_STATUS(status, mismatch,
|
||||||
|
@ -665,6 +665,7 @@ GL4CommandProcessor::UpdateStatus GL4CommandProcessor::UpdateShaders(
|
||||||
|
|
||||||
// Normal vertex shaders only, for now.
|
// Normal vertex shaders only, for now.
|
||||||
// TODO(benvanik): transform feedback/memexport.
|
// TODO(benvanik): transform feedback/memexport.
|
||||||
|
// https://github.com/freedreno/freedreno/blob/master/includes/a2xx.xml.h
|
||||||
// 0 = normal
|
// 0 = normal
|
||||||
// 2 = point size
|
// 2 = point size
|
||||||
assert_true(program_cntl.vs_export_mode == 0 ||
|
assert_true(program_cntl.vs_export_mode == 0 ||
|
||||||
|
@ -871,7 +872,8 @@ GL4CommandProcessor::UpdateStatus GL4CommandProcessor::UpdateRenderTargets() {
|
||||||
return UpdateStatus::kMismatch;
|
return UpdateStatus::kMismatch;
|
||||||
}
|
}
|
||||||
|
|
||||||
GL4CommandProcessor::UpdateStatus GL4CommandProcessor::UpdateState() {
|
GL4CommandProcessor::UpdateStatus GL4CommandProcessor::UpdateState(
|
||||||
|
PrimitiveType prim_type) {
|
||||||
bool mismatch = false;
|
bool mismatch = false;
|
||||||
|
|
||||||
#define CHECK_UPDATE_STATUS(status, mismatch, error_message) \
|
#define CHECK_UPDATE_STATUS(status, mismatch, error_message) \
|
||||||
|
@ -887,7 +889,7 @@ GL4CommandProcessor::UpdateStatus GL4CommandProcessor::UpdateState() {
|
||||||
UpdateStatus status;
|
UpdateStatus status;
|
||||||
status = UpdateViewportState();
|
status = UpdateViewportState();
|
||||||
CHECK_UPDATE_STATUS(status, mismatch, "Unable to update viewport state");
|
CHECK_UPDATE_STATUS(status, mismatch, "Unable to update viewport state");
|
||||||
status = UpdateRasterizerState();
|
status = UpdateRasterizerState(prim_type);
|
||||||
CHECK_UPDATE_STATUS(status, mismatch, "Unable to update rasterizer state");
|
CHECK_UPDATE_STATUS(status, mismatch, "Unable to update rasterizer state");
|
||||||
status = UpdateBlendState();
|
status = UpdateBlendState();
|
||||||
CHECK_UPDATE_STATUS(status, mismatch, "Unable to update blend state");
|
CHECK_UPDATE_STATUS(status, mismatch, "Unable to update blend state");
|
||||||
|
@ -1055,7 +1057,8 @@ GL4CommandProcessor::UpdateStatus GL4CommandProcessor::UpdateViewportState() {
|
||||||
return UpdateStatus::kMismatch;
|
return UpdateStatus::kMismatch;
|
||||||
}
|
}
|
||||||
|
|
||||||
GL4CommandProcessor::UpdateStatus GL4CommandProcessor::UpdateRasterizerState() {
|
GL4CommandProcessor::UpdateStatus GL4CommandProcessor::UpdateRasterizerState(
|
||||||
|
PrimitiveType prim_type) {
|
||||||
auto& regs = update_rasterizer_state_regs_;
|
auto& regs = update_rasterizer_state_regs_;
|
||||||
|
|
||||||
bool dirty = false;
|
bool dirty = false;
|
||||||
|
@ -1067,10 +1070,13 @@ GL4CommandProcessor::UpdateStatus GL4CommandProcessor::UpdateRasterizerState() {
|
||||||
XE_GPU_REG_PA_SC_SCREEN_SCISSOR_BR);
|
XE_GPU_REG_PA_SC_SCREEN_SCISSOR_BR);
|
||||||
dirty |= SetShadowRegister(®s.multi_prim_ib_reset_index,
|
dirty |= SetShadowRegister(®s.multi_prim_ib_reset_index,
|
||||||
XE_GPU_REG_VGT_MULTI_PRIM_IB_RESET_INDX);
|
XE_GPU_REG_VGT_MULTI_PRIM_IB_RESET_INDX);
|
||||||
|
dirty |= regs.prim_type != prim_type;
|
||||||
if (!dirty) {
|
if (!dirty) {
|
||||||
return UpdateStatus::kCompatible;
|
return UpdateStatus::kCompatible;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
regs.prim_type = prim_type;
|
||||||
|
|
||||||
SCOPE_profile_cpu_f("gpu");
|
SCOPE_profile_cpu_f("gpu");
|
||||||
|
|
||||||
draw_batcher_.Flush(DrawBatcher::FlushMode::kStateChange);
|
draw_batcher_.Flush(DrawBatcher::FlushMode::kStateChange);
|
||||||
|
@ -1113,6 +1119,11 @@ GL4CommandProcessor::UpdateStatus GL4CommandProcessor::UpdateRasterizerState() {
|
||||||
glFrontFace(GL_CCW);
|
glFrontFace(GL_CCW);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (prim_type == PrimitiveType::kRectangleList) {
|
||||||
|
// Rectangle lists aren't culled. There may be other things they skip too.
|
||||||
|
glDisable(GL_CULL_FACE);
|
||||||
|
}
|
||||||
|
|
||||||
static const GLenum kFillModes[3] = {
|
static const GLenum kFillModes[3] = {
|
||||||
GL_POINT, GL_LINE, GL_FILL,
|
GL_POINT, GL_LINE, GL_FILL,
|
||||||
};
|
};
|
||||||
|
|
|
@ -49,6 +49,7 @@ class GL4CommandProcessor : public CommandProcessor {
|
||||||
|
|
||||||
// HACK: for debugging; would be good to have this in a base type.
|
// HACK: for debugging; would be good to have this in a base type.
|
||||||
TextureCache* texture_cache() { return &texture_cache_; }
|
TextureCache* texture_cache() { return &texture_cache_; }
|
||||||
|
DrawBatcher* draw_batcher() { return &draw_batcher_; }
|
||||||
|
|
||||||
GLuint GetColorRenderTarget(uint32_t pitch, MsaaSamples samples,
|
GLuint GetColorRenderTarget(uint32_t pitch, MsaaSamples samples,
|
||||||
uint32_t base, ColorRenderTargetFormat format);
|
uint32_t base, ColorRenderTargetFormat format);
|
||||||
|
@ -115,9 +116,9 @@ class GL4CommandProcessor : public CommandProcessor {
|
||||||
IndexBufferInfo* index_buffer_info) override;
|
IndexBufferInfo* index_buffer_info) override;
|
||||||
UpdateStatus UpdateShaders(PrimitiveType prim_type);
|
UpdateStatus UpdateShaders(PrimitiveType prim_type);
|
||||||
UpdateStatus UpdateRenderTargets();
|
UpdateStatus UpdateRenderTargets();
|
||||||
UpdateStatus UpdateState();
|
UpdateStatus UpdateState(PrimitiveType prim_type);
|
||||||
UpdateStatus UpdateViewportState();
|
UpdateStatus UpdateViewportState();
|
||||||
UpdateStatus UpdateRasterizerState();
|
UpdateStatus UpdateRasterizerState(PrimitiveType prim_type);
|
||||||
UpdateStatus UpdateBlendState();
|
UpdateStatus UpdateBlendState();
|
||||||
UpdateStatus UpdateDepthStencilState();
|
UpdateStatus UpdateDepthStencilState();
|
||||||
UpdateStatus PopulateIndexBuffer(IndexBufferInfo* index_buffer_info);
|
UpdateStatus PopulateIndexBuffer(IndexBufferInfo* index_buffer_info);
|
||||||
|
@ -191,6 +192,7 @@ class GL4CommandProcessor : public CommandProcessor {
|
||||||
uint32_t pa_sc_screen_scissor_tl;
|
uint32_t pa_sc_screen_scissor_tl;
|
||||||
uint32_t pa_sc_screen_scissor_br;
|
uint32_t pa_sc_screen_scissor_br;
|
||||||
uint32_t multi_prim_ib_reset_index;
|
uint32_t multi_prim_ib_reset_index;
|
||||||
|
PrimitiveType prim_type;
|
||||||
|
|
||||||
UpdateRasterizerStateRegisters() { Reset(); }
|
UpdateRasterizerStateRegisters() { Reset(); }
|
||||||
void Reset() { std::memset(this, 0, sizeof(*this)); }
|
void Reset() { std::memset(this, 0, sizeof(*this)); }
|
||||||
|
|
Loading…
Reference in New Issue